conn xiaoy" /> conn xiaoy">
데이터 베이스 MySQL 튜토리얼 关于在procedure中调用dbms_lock的package

关于在procedure中调用dbms_lock的package

Jun 07, 2016 pm 04:37 PM
dbms lock procedure ~에 대한 부르다

开发人员创建的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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python을 사용하여 Baidu Map API를 호출하여 지리적 위치 쿼리 기능을 구현하는 방법은 무엇입니까? Python을 사용하여 Baidu Map API를 호출하여 지리적 위치 쿼리 기능을 구현하는 방법은 무엇입니까? Jul 31, 2023 pm 03:01 PM

Python을 사용하여 Baidu Map API를 호출하여 지리적 위치 쿼리 기능을 구현하는 방법은 무엇입니까? 인터넷의 발달로 지리적 위치정보의 획득과 활용이 점점 더 중요해지고 있다. Baidu Maps는 다양한 지리적 위치 쿼리 서비스를 제공하는 매우 일반적이고 실용적인 지도 애플리케이션입니다. 이 글에서는 Python을 사용하여 Baidu Map API를 호출하여 지리적 위치 쿼리 기능을 구현하는 방법을 소개하고 코드 예제를 첨부합니다. 바이두 지도 개발자 계정 및 애플리케이션 신청 먼저 바이두 지도 개발자 계정이 있어야 하고 애플리케이션을 만들어야 합니다. 로그인

소스 코드 탐색: Python에서 객체는 어떻게 호출되나요? 소스 코드 탐색: Python에서 객체는 어떻게 호출되나요? May 11, 2023 am 11:46 AM

웨지 우리는 객체가 두 가지 주요 방법으로 생성된다는 것을 알고 있습니다. 하나는 Python/CAPI를 사용하는 것이고, 다른 하나는 유형 객체를 호출하는 것입니다. 내장 유형의 인스턴스 객체의 경우 두 가지 방법이 모두 지원됩니다. 예를 들어 목록은 [] 또는 list()를 통해 생성할 수 있으며 전자는 Python/CAPI이고 후자는 호출 유형 객체입니다. 그러나 사용자 정의 클래스의 인스턴스 객체의 경우 유형 객체를 호출해야만 생성할 수 있습니다. 객체를 호출할 수 있으면 해당 객체는 호출 가능하고, 그렇지 않으면 호출할 수 없습니다. 객체가 호출 가능한지 여부는 해당 유형 객체에 메서드가 정의되어 있는지 여부에 따라 결정됩니다. 좋다

PHP 카메라 호출 기술: 다중 카메라 전환 구현 방법 PHP 카메라 호출 기술: 다중 카메라 전환 구현 방법 Aug 04, 2023 pm 07:07 PM

PHP 카메라 호출 기술: 여러 대의 카메라 간을 전환하는 방법 카메라 애플리케이션은 화상 회의, 실시간 모니터링 등과 같은 많은 웹 애플리케이션에서 중요한 부분이 되었습니다. PHP에서는 다양한 기술을 사용하여 카메라를 호출하고 작동할 수 있습니다. 이 기사에서는 다중 카메라 전환을 구현하는 방법에 중점을 두고 독자의 이해를 돕기 위해 몇 가지 샘플 코드를 제공합니다. 카메라 호출의 기본 PHP에서는 JavaScript API를 호출하여 카메라를 호출할 수 있습니다. 구체적으로 우리는

PHP 개발 시 외부 리소스 액세스 및 호출을 해결하는 방법 PHP 개발 시 외부 리소스 액세스 및 호출을 해결하는 방법 Oct 08, 2023 am 11:01 AM

PHP 개발에서 외부 리소스에 액세스하고 호출하는 문제를 해결하려면 특정 코드 예제가 필요합니다. PHP 개발에서는 API 인터페이스, 타사 라이브러리 또는 기타 서버 리소스와 같은 외부 리소스에 액세스하고 호출해야 하는 상황에 자주 직면합니다. . 이러한 외부 리소스를 처리할 때 성능과 안정성을 보장하면서 안전하게 액세스하고 호출하는 방법을 고려해야 합니다. 이 문서에서는 몇 가지 일반적인 솔루션을 설명하고 해당 코드 예제를 제공합니다. 1. 컬 라이브러리를 사용하여 외부 리소스를 호출합니다. 컬은 매우 강력한 오픈 소스 라이브러리입니다.

Python 프로그래밍을 통해 Baidu Map API를 호출하여 지도 표시 기능을 구현하는 방법은 무엇입니까? Python 프로그래밍을 통해 Baidu Map API를 호출하여 지도 표시 기능을 구현하는 방법은 무엇입니까? Aug 02, 2023 pm 08:27 PM

Python 프로그래밍을 통해 Baidu Map API를 호출하여 지도 표시 기능을 구현하는 방법은 무엇입니까? 인터넷의 급속한 발전으로 지도 애플리케이션은 우리 삶에 없어서는 안 될 부분이 되었습니다. 중국 최대 지도 애플리케이션 중 하나인 Baidu 지도는 지도 표시 기능을 쉽게 실현할 수 있는 풍부한 서비스와 API 인터페이스를 제공합니다. 이 기사에서는 Python 프로그래밍을 통해 Baidu Map API를 호출하여 지도 표시 기능을 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다. 먼저, 우리는

matlab에서 m개의 파일을 호출하는 방법-matlab에서 m개의 파일을 호출하는 방법 matlab에서 m개의 파일을 호출하는 방법-matlab에서 m개의 파일을 호출하는 방법 Mar 04, 2024 pm 01:49 PM

아직 matlab에서 m 파일을 호출하는 방법을 모르는 친구들이 많으므로, 아래 에디터에서 matlab에서 m 파일을 호출하는 방법을 설명하고 있으니, 꼭 참고해 보시기 바랍니다. 1. 먼저 MATLAB 소프트웨어를 열고 아래 그림과 같이 메인 인터페이스에서 "열기"를 클릭합니다. 2. 그런 다음 열려고 하는 m 파일을 선택하고 아래 그림과 같이 열기를 선택합니다. 3. 그런 다음 아래 그림과 같이 편집기에서 m 파일의 파일 이름과 변수 개수를 확인합니다. 4. 아래 그림과 같이 명령줄에 m 파일 이름과 괄호 안에 변수 값을 입력하여 호출할 수 있습니다. 5. 마지막으로 아래 그림과 같이 m 파일을 성공적으로 호출할 수 있습니다. 위는 편집자가 가져온 matlab에서 m 파일을 호출하는 방법에 대한 전체 설명입니다.

Java를 사용하여 WebService를 호출하는 방법 Java를 사용하여 WebService를 호출하는 방법 Dec 29, 2023 pm 02:32 PM

Java를 사용하여 WebService를 호출하는 방법 단계에는 특정 코드 예제가 필요합니다. 웹 서비스는 네트워크를 통해 다양한 기능을 제공하는 웹 기반 응용 프로그램 인터페이스입니다. Java 개발에서는 다른 시스템과 상호 작용하기 위해 웹 서비스를 사용해야 하는 경우가 많습니다. 이 기사에서는 Java를 사용하여 WebService를 호출하는 방법을 소개하고 특정 코드 예제를 제공합니다. 1. WebService 이해 WebService는 XML 형식을 사용하는 표준화된 통신 프로토콜입니다.

Java 멀티스레딩에서 잠금을 사용하는 방법 Java 멀티스레딩에서 잠금을 사용하는 방법 May 12, 2023 pm 02:46 PM

Jdk1.5 이후에는 java.util.concurrent.locks 패키지 아래에 스레드 동기화를 구현하는 일련의 인터페이스와 클래스가 있습니다. 스레드 동기화에 관해서라면 누구나 내장된 동기화 키워드를 생각할 수 있습니다. Java의 키워드입니다. 스레드 동기화를 처리하지만 이 키워드는 결함이 많고 사용하기가 매우 편리하지 않으므로 아래에서 Lock을 비교하여 설명하겠습니다. 일반적으로 동기화 키워드를 사용할 때 다음과 같은 문제에 직면하게 됩니다. (1) 통제 불가능성, 잠금을 마음대로 잠그거나 해제할 수 없습니다. (2) 효율성이 상대적으로 낮습니다. 예를 들어 현재 두 개의 파일을 동시에 읽고 있습니다.

See all articles