Nom de colonne avec caractères spéciaux inaccessible
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:
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:
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:
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:
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 :mouarf: