![]() |
Datenbank: Oracle • Version: 8/9 • Zugriff über: -
Variablen Größe unter Oracle ermitteln
HoiHoi,
habe mal eine Frage an euch DB Spezis ;) Ich schreibe gerade an einer DB Procedure, und zwar wollte ich jetzt herrausfinden wie ich meinen VARCHAR2 deklariert habe, bzw mit welcher Länge und mir später längenanpassungen bei den L- order RPADS zu sparen. bsp:
SQL-Code:
Dann sollte nTest = 50 sein, ich weiß nur nicht wie ich das herrausfinden kann, gibt es sowas wie ich mir denke oder etwas vergleichbares zu meiner erträumten GETVARSIZE Function? ;)
nTest NUMBER;
sTest VARCHAR2(50) nTest:=GETVARSIZE(sTest); Gruss, Daniel |
Re: Variablen Größe unter Oracle ermitteln
Hallo static_cast,
AFAIK gibt es die Tabelle USER_TAB_COLUMNS. Dort kannst du Informationen zu den einzelnen Tabellen/Feldern erfahren:
SQL-Code:
Ich weiss jetzt nicht genau, wie die einzelnen Felder usw. heissen, da ich momentan keine Oracle-DB in meiner Naehe habe, aber so muesste es irgendwie gehn...
SELECT * FROM USER_TAB_COLUMNS
Greetz alcaeus |
Re: Variablen Größe unter Oracle ermitteln
Es wäre eher All_Tab_Columns. In den User_XXX stehen ja nur deine Objekte. ;)
@daniel Ich würde dir auch den Weg über das Data Dictionary empfehlen. Ich kenne ehrlich gesagt keine Funktion dafür. (Habe aber auch noch nie direkt danach gesucht... :gruebel: ) |
Re: Variablen Größe unter Oracle ermitteln
Hier das Statement um alle Felder und deren Infos zu einer Tabelle zu bekommen:
SQL-Code:
Den Rest überlasse ich Dir :zwinker:
Select * from All_Tab_Columns
where owner = '<username>' and table_name = '<tabellenname>' |
Re: Variablen Größe unter Oracle ermitteln
Hi,
danke für eure Antworten :) aber das problem ist, es handelt sich hierbei nicht um eine Tabelle, sondern um Variablen in einer Procedure! Daher funzt das leider nicht :( |
Re: Variablen Größe unter Oracle ermitteln
Haut mich falls ich mich irre, aber wenn du die max. Größe einer Variable in einer SP haben willst, warum siehst du dann nicht oben nach? Die Variablen sind AFAIK doch lokal, und du wirst ja hoffentlich wissen wie du die Dinger deklariert hast ;)
Wie gesagt, ich kann mich auch irren aber... :gruebel: Greetz alcaeus |
Re: Variablen Größe unter Oracle ermitteln
Nene hast schon recht, nur mir ging es halt darum Wartungsarbeiten zu erleichtern.
Das ist jetzt nur ein kleiner Auszug dessen:
SQL-Code:
Ich wollte nur an jeweils einer Stelle die längen anpassen müssen um Fehler zu vermeiden und alleine schon der Faulheit wegen ;)
[...]
sTitel VARCHAR2(60); sFirstName VARCHAR2(30); sInitials VARCHAR2(10); sSurName VARCHAR2(10); sLastName VARCHAR2(60); sStreet VARCHAR2(60); sHouseNr VARCHAR2(10); sHouseNrExt VARCHAR2(5); sZipCode VARCHAR2(10); sCity VARCHAR2(60); [...] RPAD(NVL(sTitel,' '),60) || RPAD(NVL(sFirstName,' '),30) || RPAD(NVL(sInitials,' '),10) || RPAD(NVL(sSurName,' '),10) || RPAD(NVL(sLastName,' '),60) || RPAD(NVL(sStreet,' '),60) || RPAD(NVL(sHouseNr,' '),10) || RPAD(NVL(sHouseNrExt,' '),5) || RPAD(NVL(sZipCode,' '),10) || RPAD(NVL(sCity,' '),60) || [...] |
Re: Variablen Größe unter Oracle ermitteln
Dann machst mit Konstanten (allerdings weiß ich jetzt auch nicht genau wie das geht :duck:), und versuche die Felder mit den Konstanten als Längenangabe zu deklarieren. Ich rate mal rum:
SQL-Code:
Ich weiß aber nicht ob das funktioniert, das Prinzip passt aber auf alle Fälle ;)
[...]
lTitel NUMBER; lTitel := 60; [...] sTitel VARCHAR2(lTitel); [...] RPAD(NVL(sTitel,' '),lTitel) || [...] Greetz alcaeus |
Re: Variablen Größe unter Oracle ermitteln
Das wäre eine Idee, aber ich habe keine Ahnung wie ich Konstanten im Deklarationsabschnitt anlegen kann.
|
Re: Variablen Größe unter Oracle ermitteln
Zitat:
SQL-Code:
oder wenn du es in mehreren Code objekten brauchst:
Miep constant integer := XXXX;
SQL-Code:
create or replace package SomeConstants is
Miep constant integer := XXXX; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz