Hello amis DBA,
Pour mes tests j'ai créée une table avec un nom de colonne contenant des caractères spéciaux.
Problème : impossible de référencer la colonne.
Plus fort : les colonnes semblent être traitée différemment que les tables car une table avec le même nom peut être interrogée.
La création de la colonne avec des guillemets est OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SQL> CREATE TABLE test02 ("a$^ù*$" VARCHAR2(10)); Table created. SQL> desc test02 Name Null? Type ------------------------------------ a$^??*$ VARCHAR2(10) SQL> SELECT * FROM test02; a$^??*$ ---------- TEST SQL> SELECT COLUMN_NAME from dba_tab_cols where TABLE_NAME = 'TEST02' and owner = 'HR'; COLUMN_NAME ---------------------------------------------------------------------------------------------------- a$^??*$
Interrogation KO.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SQL> select a$^??*$ from test02; select a$^??*$ from test02 * ERROR at line 1: ORA-00923: FROM keyword not found where expected SQL> select "a$^??*$" from test02; select "a$^??*$" from test02 * ERROR at line 1: ORA-00904: "a$^??*$": invalid identifier
En PL/SQL c'est pas mieux...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SQL> DECLARE v_col_name VARCHAR2(128); v_select VARCHAR2(128); BEGIN SELECT COLUMN_NAME into v_col_name from dba_tab_cols where TABLE_NAME = 'TEST02' and owner = 'HR'; v_select := 'SELECT "' || v_col_name || '" FROM test02'; dbms_output.put_line(v_select); EXECUTE IMMEDIATE 'SELECT ' || v_col_name || ' FROM test02'; END; / SELECT "a$^??*$" FROM test02 DECLARE * ERROR at line 1: ORA-00923: FROM keyword not found where expected ORA-06512: at line 8
En revanche, pour une table de même nom, pas de problème pour utiliser les guillemets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SQL> CREATE TABLE "a$^??*$" ( ID NUMBER); Table created. SQL> desc "a$^??*$" Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NUMBER SQL> select * from "a$^??*$"; no rows selected
Une aide serait bienvenue
Partager