Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Usenet -> c.d.o.server -> Re: How to do the equivalent of 'describe' with a SELECT?

Re: How to do the equivalent of 'describe' with a SELECT?

From: <>
Date: Sun, 01 Apr 2007 00:03:28 +0200
Message-ID: <>

On 31 Mar 2007 11:22:11 -0700, "Ramon F Herrera" <> wrote:

>On Mar 31, 12:05 pm, wrote:
>> On 31 Mar 2007 07:50:06 -0700, "Ramon F Herrera" <>
>> wrote:
>> >The SQL code that I need is for a Pro*C/C++ application. Before my
>> >compiled C program does its main thing, it should check the current
>> >sizes of the variables in the target table.
>> Why, do you think you can dynamically change the change of variables
>> of a *compiled* program? That would be very weird.
>> >I would like to be able to change the variables' sizes, for instance,
>> >from:
>> >VARCHAR(20);
>> >to
>> >VARCHAR(30);
>> >without having to recompile all my C programs. Or at least, reduce the
>> >impact of such resize.
>> >TIA,
>> >-Ramon
>> In PL/SQL you would declare the variable as
>> <variable> <table>.<column>%type
>> but you would still need to recompile everything (automagically).
>> May be something similar exists in Pro*C.
>> Apart from that your task is impossible: you simply can't change
>> dynamically the limits of *statically* declared variables, or you
>> would need pointer variables everywhere.
>> Such is the fate of a developer hardcoding everything and not using
>> constants.
>> --
>> Sybrand Bakker
>> Senior Oracle DBA
>This is the situation, Sybrand.
>My application creates delimited <tablename>.dat files and I want to
>make sure that some fields are properly truncated (or perhaps there is
>a way to tell SQL*Loader to do the truncation? I rather do it myself,
>and spare sqlldr the trouble).
>Currently the guy wearing the SQL/PL hat and the C developer hat is
>just me, but maybe later on, some guy will change the sizes of
>variables and break things.
>I have some programs that read files from disk and place them in an
>array. The typical solution is to declare a huge array size which will
>hopefully never be outgrown.
>I think this should be used:
> if (numberOfLines > MAXLINES) {
> printf("This program has to be recompiled\n");
> printf("Change the value of `MAXLINES' to at least %d\n",
> exit (99);
> }
>I am thinking of using a similar approach with the sizes of variables:
>allow the PL/SQL guy to change them anytime, without having to tell
>the C developer, who will find out about the change next time he tries
>to run one of his programs.

Your post is very contradictory.
Your application creates .dat files by using SQL*Loader. SQL*Loader is suited to read files only!
And why don't you output everything in delimited fashion? Also files are read into an array. Arrays deal with records, not with columns.
Anyway: the very nature of *compilation* is that the size of all variables is determined at *compiletime* instead of *runtime*. So what you describe simply isn't possible. It also calls for more generic datatypes, let's say every surrogate key is a number(10), and in Pro*C the number 10 would need to be replaced by a constant. Change the size of all keys, change the constant, recompile and that's all there is to it. THAT would be good programming style. What you describe is a situation without any version control, where for the sake of 'flexibility' version control is replaced by some mechanism in the application, which can only be described as an ultimate nightmare.

Sybrand Bakker
Senior Oracle DBA
Received on Sat Mar 31 2007 - 17:03:28 CDT

Original text of this message