2008-09-29 6 views
3

je rencontré le ddl suivant dans un script pl/sql ce matin:opérateur pl/sql dollar?

create index genuser.idx $$ _ 0bdd0011 ...

Ma première pensée a été que le nom de l'index a été généré par un outil. ..mais je ne suis pas non plus une superstar du pl/sql donc je pourrais très bien me tromper. Est-ce que le signe du double dollar a une signification particulière dans cette déclaration?

Répondre

2

Votre première pensée semble être correcte. Cela semblerait être un nom d'index généré par un outil (mais non attribué par Oracle car un nom d'index n'a pas été spécifié). Les symboles dollar n'ont pas de signification particulière, sinon qu'ils sont des symboles valides rarement utilisés par les développeurs humains. Ils sont donc pratiques pour réduire le risque qu'un nom généré par le système entre en conflit avec un nom généré par un humain.

+1

Je pense que le 0bdd0011 prend en charge cette. –

2

Aucune signification ou signification particulière.

SQL> create table t (col number) 
    2/

Table created. 

SQL> create index idx$$_0bdd0011 on t(col) 
    2/

Index created. 

Note: CREATE INDEX est une instruction DDL qui est généralement exécutée dans un script SQL, pas dans PL/SQL.

2

Quel que soit l'endroit où il le nom est venu, il est contraire à l'avis documenté d'Oracle: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements008.htm#SQLRF00223

Oracle vous déconseille fortement d'utiliser $ et # dans les identificateurs nonquoted

+0

Qu'est-ce que cela signifie même? "Fortement décourager"? Oooo tu ferais mieux de ne pas le faire, ou, ou ... ou ... je vais devenir vraiment fou. WTF –

+0

Oui, ce n'est pas vraiment équivalent à "$ et # ne sont pas supportés dans les délimiteurs non-cotés". Personnellement, j'ai toujours eu un faible pour nommer les colonnes de clé primaire des tables comme MY_TABLE #. Maintenant, je me sens "découragé" de le faire :( –