Pour répondre à la question facile d'abord, nous n'avons pas besoin d'exécuter l'unité de programme. Nous devons le compiler. C'est relativement simple:
SQL> alter session set plscope_settings='IDENTIFIERS:ALL'
2/
Session altered.
SQL> alter function str_to_number_tokens compile
2/
Function altered.
SQL> SELECT LPAD(' ', level*2, ' ') || name AS name, type, usage, usage_id, line, col
2 FROM user_identifiers
3 START WITH usage_context_id = 0
4 CONNECT BY PRIOR usage_id = usage_context_id;
NAME TYPE USAGE USAGE_ID LINE COL
------------------------------ ------------------ ----------- ---------- ---------- ----------
STR_TO_NUMBER_TOKENS FUNCTION DECLARATION 1 1 10
STR_TO_NUMBER_TOKENS FUNCTION DEFINITION 2 1 10
P_STRING FORMAL IN DECLARATION 3 2 10
P_SEPARATOR FORMAL IN DECLARATION 4 3 13
P_SEPARATOR FORMAL IN ASSIGNMENT 5 3 13
RETURN_VALUE VARIABLE DECLARATION 6 6 5
REGEX_STR VARIABLE DECLARATION 7 7 5
REGEX_STR VARIABLE ASSIGNMENT 8 10 9
P_SEPARATOR FORMAL IN REFERENCE 9 10 31
REGEX_STR VARIABLE REFERENCE 10 17 46
P_STRING FORMAL IN REFERENCE 11 17 36
REGEX_STR VARIABLE REFERENCE 12 16 47
P_STRING FORMAL IN REFERENCE 13 16 37
REGEX_STR VARIABLE REFERENCE 14 12 57
P_STRING FORMAL IN REFERENCE 15 12 47
RETURN_VALUE VARIABLE ASSIGNMENT 16 14 22
RETURN_VALUE VARIABLE REFERENCE 17 19 16
17 rows selected.
SQL>
(crédit où le crédit est dû, je pris cette requête de mon compagnon Tim Hall's Oracle-Base site)
Par ailleurs, notez que PL/Champ d'application fonctionne sur des programmes PL/SQL nommés (procédures, fonctions , paquets, etc.) Cela ne fonctionne pas sur les blocs PL/SQL anonymes. Je mentionne cela parce que vous parlez de «scripts» plutôt que de programmes. Il ne fera rien avec un script SQL contenant des blocs PL/SQL.
L'autre chose à garder à l'esprit est que PL/Scope remplit les tables sur l'espace de table SYSAUX, et peut ronger beaucoup de stockage. C'est pourquoi il n'est pas exécuté par défaut, et c'est pourquoi nous devrions l'utiliser judicieusement. En ce qui concerne la rétrocompatibilité: c'est une nouvelle fonctionnalité de 11g, et c'est une fonctionnalité de compilateur. Donc, je doute que ce soit quelque chose que vous pourriez juste crowbar dans une installation de 10g.
« nous ne devons pas exécuter l'unité de programme. Nous devons compiler » ne savait pas ça, merci. –