當前位置:首頁 » 編程語言 » oracle存儲過程中的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle存儲過程中的sql

發布時間: 2022-07-03 13:38:38

1. 如何在oracle存儲過程中執行動態sql語句

時需要在oracle 存儲過程中執行動態SQL 語句 ,例如表名是動態的,或欄位是動態的,
或查詢命令是動態的,可用下面的方法:
set serveroutput ondeclaren number;sql_stmt varchar2(50);
t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD''';
t := 't_' || sysdate;
sql_stmt := 'select count(*) from ' || t;
execute immediate sql_stmt into n;
dbms_output.put_line('The number of rows of ' || t || ' is ' || n);end;
如果動態SQL 語句 很長很復雜,則可用包裝.
CREATE OR REPLACE PACKAGE test_pkgISTYPE cur_typ IS REF CURSOR;
PROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ);END;/
CREATE OR REPLACE PACKAGE BODY test_pkgISPROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ)ISsqlstr VARCHAR2(2000);BEGINsqlstr := 'SELECT * FROM '||v_table;
OPEN t_cur FOR sqlstr;END;END;/
在oracle 中批量導入,導出和刪除表名以某些字元開頭的表
spool c:\a.sql

2. 關於oracle存儲過程中的sql拼接,大神進!!!

procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里調用時:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum

3. oracle存儲過程中如何執行動態SQL語句

有時需要在oracle
存儲過程
中執行動態SQL
語句
,例如表名是動態的,或欄位是動態的,或查詢命令是動態的,可用下面的方法:
set
serveroutput
on
declare
n
number;
sql_stmt
varchar2(50);
t
varchar2(20);
begin
execute
immediate
'alter
session
set
nls_date_format=''YYYYMMDD''';
t
:=
't_'
||
sysdate;
sql_stmt
:=
'select
count(*)
from
'
||
t;
execute
immediate
sql_stmt
into
n;
dbms_output.put_line('The
number
of
rows
of
'
||
t
||
'
is
'
||
n);
end;
如果動態SQL
語句
很長很復雜,則可用包裝.
CREATE
OR
REPLACE
PACKAGE
test_pkg
IS
TYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);
END;
/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkg
IS
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)
IS
sqlstr
VARCHAR2(2000);
BEGIN
sqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;
END;
END;
/
在oracle
中批量導入,導出和刪除表名以某些字元開頭的表
spool
c:\a.sql
select
'drop
table
'
||
tname
||
';'
from
tab
where
tname
like
'T%';
spool
off
@c:\a

4. oracle存儲過程怎麼判斷一條sql語句是否成功

oracle存儲過程判斷一條sql語句是否成功的方法是增加exception處理,如果沒有拋出exception,那就證明正常執行了。

在Oracle中,異常分為以下兩類:

Oracle預定義異常

用戶自定義異常

在Oracle中預定義的異常如下表所示:

在Oracle中有以下三種方式觸發異常:

  • 由Oracle自動觸發異常

  • 使用RAISE語句手工觸發

  • 調用存儲過程RAISE_APPLICATION_ERROR手工觸發

代碼將演示Oracle自動觸發異常:

-- Created on 2015-7-14 by JellyThink
declare
iA NUMBER(2) := 10;
begin
iA := iA / 0; -- Oracle自動觸發異常
dbms_output.put_line(iA);
exception
when ZERO_DIVIDE then
dbms_output.put_line('Error Code:' || SQLCODE || ' ' || SQLERRM);
when others then
dbms_output.put_line('Others Exception');
end;

5. oracle存儲過程中 sql寫法

表結構一樣的話record,
到時候就是
delete t where name= 『區一』;
delete t where name= 『區二』;
insert into t values(record1.貓數+record2.貓數。。。。。。。。。。。。。。。。。。。。。)即可

6. oracle 存儲過程中動態sql語句

v_sql :=' update aj set recount=(select num_rows from dba_tables where table_name = ' || v_tablename || ') where tablename=' || v_tablename

7. SQL命令查詢Oracle存儲過程信息

oracle資料庫中,已建立好的存儲過程信息存儲在系統表ALL_SOURCE 中,需要用sysdba身份登錄資料庫,進行查詢操作,SQL命令如下:

SELECTline,textFROMALL_SOURCE
WHERETYPE='PROCEDURE'
ANDNAME='過程名稱'
ANDOWNER='用戶名'
ORDERBYline;

存儲過程分成多行,每一行會存儲為一條數據,所以,查詢出來的會是多行,line表示行號。


ALL_SOURCE 表中還存儲了以下類型信息:

SQL>selectdistincttypefromall_source;
TYPE
------------
TYPE(對象)類型
TYPEBODY類型體
PROCEDURE存儲過程
FUNCTION函數
TRIGGER觸發器
PACKAGE包
PACKAGEBODY包體

8. 如何使用oracle存儲過程執行外部的sql腳本文件

你把腳本內容直接在存儲過程中實現,然後利用job去定時調度就好了。