gibts unter Oracle PL/SQL ein Zeichen, womit ich Sonderzeichen maskieren
kann.
Beispiel: variable := 'to_char('27.07.2002', 'DD.MM.YYYY')'
Die Anführungsstriche kennt er natürlich nicht. Gibts ein Escapezeichen? "\"
ist es ja leider nicht. Ich find dieses verdammte Ding nicht.
Bis dann,
Georg
Du musst es definieren mit dem Identifier ESCAPE. Die ESCAPE-Option
identifiziert z. B. den Backslash '\' als Escapesymbol. Das ergibt dann
bei deinem Beispiel:
variable := \'to_char('27.07.2002', 'DD.MM.YYYY')\' ESCAPE '\'
Als Escape-Zeichen kann ein beliebiges Zeichen genommen werden.
Ausprobiert mit PL/SQL habe ich es allerdings noch nicht.
--
Ernst Biesalski
Hochkomma escaped man mit sich selber:
SQL> select 'a' as text from dual;
T
-
a
SQL> select '''a''' as text from dual;
TEX
---
'a'
Das Schlüßelwort ESCAPE gibt es nur in reinem SQL beim Arbeiten mit Wildcards:
SQL> CREATE TABLE t
2 (v VARCHAR2(10));
Table created.
SQL>
SQL> INSERT INTO t VALUES
2 ('a%b%c');
1 row created.
SQL>
SQL> INSERT INTO t VALUES
2 ('a%c%b');
1 row created.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
SQL>
SQL> SELECT * FROM t
2 WHERE v LIKE 'a%b%';
V
----------
a%b%c
a%c%b
SQL>
SQL> SELECT * FROM t
2 WHERE v LIKE 'a\%b%' ESCAPE '\';
V
----------
a%b%c
Marc Blum
mailto:ma...@marcblum.de
http://www.marcblum.de
funktioniert super, danke. Weisst Du zufällig auch, wie man herauskriegt, um
welchen Variablentyp(varchar2, number,...) es sich handelt? Mit DUMP könnte
gehen, da krieg ich jedoch noch viele andere Informationen mit, und muss
dann mit like 'Typ=xx%' unterscheiden gibts da noch was anderes - simpleres?
Bis dann,
Georg
"Marc Blum" <ma...@marcblum.de> schrieb im Newsbeitrag
news:fik4kug4csgv1i1fm...@4ax.com...
>... Weisst Du zufällig auch, wie man herauskriegt, um
>welchen Variablentyp(varchar2, number,...) es sich handelt? Mit DUMP könnte
>gehen, da krieg ich jedoch noch viele andere Informationen mit, und muss
>dann mit like 'Typ=xx%' unterscheiden gibts da noch was anderes - simpleres?
>
hm.. ehrlich gesagt verstehe ich Deine Frage nicht so ganz. Die Datentypen der
Spalten einer Tabelle bekommst Du per:
SELECT column_name,data_type, ...weitere attribute
FROM user_tab_columns
WHERE table_name = UPPER('<MEINE_TABELLE>')
/
In PL/SQL muß jede Variable deklariert werden. Da steht dann im Source Code der
Datentyp oder es wird auf den Datentyp einer anderen Variablen verwiesen ( %TYPE
oder %ROWTYPE).
hth
Also ich programmier zur Zeit ein kleines PL/SQL Programm, dass mit
dynamischen PL/SQL verschiedene 'WHERE' - Klauseln zusammenbastelt. Nun, da
sich Numerische Werte und Stringwerte leider nicht gleich in der
'WHERE'-Klausel (soweit ich weis?) behandeln lassen, wollte ich eine
Unterscheidung anhand des Variablentyps treffen. Also wenn Numerischer Wert,
dann nimm: 'like' || '''' Wert || '%' || '''' ansonsten nimm: '<' ||
Wert usw.. Da ich jedoch vorher die Input-Variable deklarieren muss, fällt
wohl diese Möglichkeit eh flach - ausser ich würd das Ding generell as
String übergeben und dann überprüfen, ob der String einen Numerischer Wert
enthält. Das aber geht in PL/SQL wohl nicht so einfach, oder?
Bis dann,
Georg
"Marc Blum" <ma...@marcblum.de> schrieb im Newsbeitrag
news:82r4ku8qf8a7egb1k...@4ax.com...
>Hallo Marc,
>
>Also ich programmier zur Zeit ein kleines PL/SQL Programm, dass mit
>dynamischen PL/SQL verschiedene 'WHERE' - Klauseln zusammenbastelt. Nun, da
>sich Numerische Werte und Stringwerte leider nicht gleich in der
>'WHERE'-Klausel (soweit ich weis?) behandeln lassen, wollte ich eine
>Unterscheidung anhand des Variablentyps treffen. Also wenn Numerischer Wert,
>dann nimm: 'like' || '''' Wert || '%' || '''' ansonsten nimm: '<' ||
>Wert usw.. Da ich jedoch vorher die Input-Variable deklarieren muss, fällt
>wohl diese Möglichkeit eh flach - ausser ich würd das Ding generell as
>String übergeben und dann überprüfen, ob der String einen Numerischer Wert
>enthält. Das aber geht in PL/SQL wohl nicht so einfach, oder?
einfach einen anonymen PL/SQL-Block (oder als Function irgendwo ablegen) zum
Checken benutzen:
FUNCTION is_numeric (i_string IN VARCHAR2)
IS
l_dummy NUMBER;
BEGIN
l_dummy := TO_NUMBER(i_string);
RETURN (TRUE);
EXCEPTION
WHEN OTHERS THEN
RETURN (FALSE);
END;
/
Da spielen dann aber schnell so sachen wie Formatmasken (ist 1.000.000,00 auch
ok?) und NLS-Parameter (oder soll nur 1,000,000.00 ok sein?) rein.
schnurrt wie ein Kätzchen!!!! Vielen Dank. Wenn Du in München wohnst, bist
Du auf ein Bier eingeladen...
Bis dann,
Georg
"Georg Höfler" <georg....@web.de> schrieb im Newsbeitrag
news:ahu1qe$em$02$1...@news.t-online.com...