关于在procedure中调用dbms_lock的package
开发人员创建的procedure需要调用dbms_lock的package中的对象,调用时候出现了类似下列的问题。 SQL> create or replace procedure proc01 as 2 begin 3 dbms_lock.sleep(10); 4 end; 5 / Procedure created. SQL> show user; USER is "SYS" SQL> conn xiaoy
开发人员创建的procedure需要调用dbms_lock的package中的对象,调用时候出现了类似下列的问题。<br>
SQL> create or replace procedure proc01 as<br>
2 begin<br>
3 dbms_lock.sleep(10);<br>
4 end;<br>
5 /
Procedure created.
SQL> show user;
USER is "SYS"
SQL> conn xiaoyu/xiaoyu
Connected.
SQL> create or replace procedure proc01 as
2 begin
3 dbms_lock.sleep(10);
4 end;
5 /
Warning: Procedure created with compilation errors.
SQL> show errors;
Errors for PROCEDURE PROC01:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/1 PL/SQL: Statement ignored
3/1 PLS-00201: identifier 'DBMS_LOCK' must be declared
SQL> conn / as sysdba
Connected.
这里用静态sql调用dbms_lock的package时,oracle报出了无法识别该package,这里需要单独授权这个package给用户,这个需要特别注意,因为正常的匿名块程序中我们是可以调用的,但是procedure中则不行了。
SQL> grant execute on sys.dbms_lock to xiaoyu;
Grant succeeded.
SQL> conn xiaoyu/xiaoyu
Connected.
SQL> create or replace procedure proc01 as
2 begin
3 dbms_lock.sleep(10);
4 end;
5 /
Procedure created.
但是这里并不是说所有的dbms开头的package下的对象都不能在procedure或者function中调用,比如dbms_stats的package在不单独授权的情况下就能够正常调用。
SQL> create or replace procedure proc03 as
2 begin
3 dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T_DYNAMIC01');
4 end;
5 /
Procedure created.
这里我们想想动态sql能否实现了:
SQL> revoke execute on sys.dbms_lock from xiaoyu;
Revoke succeeded.
SQL> create or replace procedure proc01 as
2 begin
3 execute immediate 'dbms_lock.sleep(10)';
4 end;
5 /
Procedure created.
SQL> exec proc01;
BEGIN proc01; END;
*
ERROR at line 1:
ORA-00900: invalid SQL statement
ORA-06512: at "SYS.PROC01", line 3
ORA-06512: at line 1
这里来看动态sql执行的时候出现了问题,oracle报出了在第三行出现了无效的语句,动态sql相比静态sql可以解决一些静态sql无法实现的问题,比如参数的不确定性造成没办法评估程序的具体操作,再比如在存储过程或者匿名块中实现ddl语句。
如下动态sql解决在procedure中实现ddl的示例:
SQL> create or replace procedure proc02 as
2 begin
3 create table t_dynamic01 as select * from dual;
4 end;
5 /
Warning: Procedure created with compilation errors.
SQL> show errors;
Errors for PROCEDURE PROC02:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/1 PLS-00103: Encountered the symbol "CREATE" when expecting one of
the following:
begin case declare exit for goto if loop mod null pragma
raise return select update while with
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
SQL> create or replace procedure proc02 as
2 begin
3 execute immediate 'create table t_dynamic01 as select * from dual';
4 end;
5 /
Procedure created.
SQL> exec proc02;
PL/SQL procedure successfully completed.
SQL> select * from t_dynamic01;
D
-
X
原文地址:关于在procedure中调用dbms_lock的package, 感谢原作者分享。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Python pour appeler l'API Baidu Map afin d'implémenter la fonction de requête de localisation géographique ? Avec le développement d’Internet, l’acquisition et l’utilisation d’informations de localisation géographique deviennent de plus en plus importantes. Baidu Maps est une application cartographique très courante et pratique qui fournit une multitude de services de requête de localisation géographique. Cet article expliquera comment utiliser Python pour appeler l'API Baidu Map afin d'implémenter la fonction de requête de localisation géographique et joindra un exemple de code. Demander un compte de développeur et une application Baidu Map Tout d'abord, vous devez disposer d'un compte de développeur Baidu Map et créer une application. Se connecter

Wedge Nous savons que les objets sont créés de deux manières principales, l'une via Python/CAPI et l'autre en appelant un objet de type. Pour les objets d'instance de types intégrés, les deux méthodes sont prises en charge. Par exemple, les listes peuvent être créées via [] ou list(). La première est Python/CAPI et la seconde est un objet de type appelant. Mais par exemple les objets de classes personnalisées, nous ne pouvons les créer qu'en appelant des objets de type. Si un objet peut être appelé, alors l'objet est appelable, sinon il ne l'est pas. Déterminer si un objet est appelable dépend du fait qu'une méthode est définie dans son objet de type correspondant. comme

Compétences en matière d'appel de caméra PHP : comment basculer entre plusieurs caméras. Les applications de caméra sont devenues une partie importante de nombreuses applications Web, telles que la vidéoconférence, la surveillance en temps réel, etc. En PHP, nous pouvons utiliser diverses technologies pour appeler et faire fonctionner la caméra. Cet article se concentrera sur la façon de mettre en œuvre la commutation multi-caméras et fournira des exemples de code pour aider les lecteurs à mieux comprendre. Bases de l'appel de caméra En PHP, nous pouvons appeler la caméra en appelant l'API JavaScript. Plus précisément, nous

Comment résoudre le problème de l'accès et de l'appel à des ressources externes dans le développement PHP nécessite des exemples de code spécifiques. Dans le développement PHP, nous rencontrons souvent des situations dans lesquelles nous devons accéder et appeler des ressources externes, telles que des interfaces API, des bibliothèques tierces ou d'autres ressources de serveur. . Lorsque nous traitons avec ces ressources externes, nous devons réfléchir à la manière d'accéder et d'appeler en toute sécurité tout en garantissant performances et fiabilité. Cet article décrit plusieurs solutions courantes et fournit des exemples de code correspondants. 1. Utilisez la bibliothèque curl pour appeler des ressources externes. Curl est une bibliothèque open source très puissante.

Comment appeler l'API Baidu Map via la programmation Python pour implémenter la fonction d'affichage de la carte ? Avec le développement rapide d’Internet, les applications cartographiques sont devenues un élément indispensable de nos vies. En tant que l'une des plus grandes applications cartographiques en Chine, Baidu Maps nous offre une multitude de services et d'interfaces API, qui peuvent facilement réaliser la fonction d'affichage de la carte. Cet article explique comment appeler l'API Baidu Map via la programmation Python pour réaliser la fonction d'affichage de la carte et donne des exemples de code correspondants. Tout d'abord, nous devons enregistrer un

De nombreux amis ne savent toujours pas comment appeler des fichiers m dans matlab, donc l'éditeur ci-dessous explique comment appeler des fichiers m dans matlab. Si vous en avez besoin, dépêchez-vous et jetez un œil, je pense que cela sera utile à tout le monde. 1. Ouvrez d'abord le logiciel Matlab et cliquez sur "Ouvrir" dans l'interface principale, comme indiqué dans la figure ci-dessous. 2. Sélectionnez ensuite un fichier m qui doit être ouvert et sélectionnez Ouvrir, comme indiqué dans la figure ci-dessous. 3. Regardez ensuite le nom du fichier et le nombre de variables du fichier m dans l'éditeur, comme indiqué dans la figure ci-dessous. 4. Vous pouvez saisir le nom du fichier m suivi de la valeur de la variable entre parenthèses sur la ligne de commande pour l'appeler, comme indiqué dans la figure ci-dessous. 5. Enfin, le fichier m peut être appelé avec succès, comme le montre la figure ci-dessous. Ce qui précède est la description complète de la façon d'appeler des fichiers m dans matlab présentée par l'éditeur.

Les étapes de la méthode d'utilisation de Java pour appeler WebService nécessitent des exemples de code spécifiques. Le service Web est une interface de programme d'application basée sur le Web qui fournit diverses fonctions via le réseau. Dans le développement Java, nous devons souvent utiliser des services Web pour interagir avec d'autres systèmes. Cet article explique comment utiliser Java pour appeler WebService et fournit des exemples de code spécifiques. 1. Comprendre WebService WebService est un protocole de communication standardisé utilisant le format XML

Après Jdk1.5, sous le package java.util.concurrent.locks, il existe un ensemble d'interfaces et de classes qui implémentent la synchronisation des threads. En matière de synchronisation des threads, tout le monde peut penser au mot-clé synchronisé, qui est un mot-clé intégré. mot-clé en Java. Il gère la synchronisation des threads, mais ce mot-clé présente de nombreux défauts et n'est pas très pratique et intuitif à utiliser, donc Lock apparaît ci-dessous, nous allons comparer et expliquer Lock. Habituellement, lorsque nous utilisons le mot-clé synchronisé, nous rencontrerons les problèmes suivants : (1) Incontrôlabilité, impossible de verrouiller et de déverrouiller les verrous à volonté. (2) L'efficacité est relativement faible. Par exemple, nous lisons actuellement deux fichiers simultanément.
