當前位置:首頁 » 編程語言 » oracle游標動態sql

oracle游標動態sql

發布時間: 2022-04-17 08:41:03

⑴ 如何實現Oracle資料庫中的動態游標

  • createorreplaceprocereP_TEST_sqlis

  • TYPEref_cursor_typeISREFCURSOR;--定義一個動態游標

  • tablenamevarchar2(200)default'ess_client';

  • v_sqlvarchar2(1000);

  • mobilevarchar2(15);

  • usrsref_cursor_type;

  • begin

  • --使用連接符拼接成一條完整SQL

  • v_sql:='selectusrmsisdnfrom'||tablename||'whererownum<11';

  • --打開游標

  • openusrsforv_sql;

  • loop

  • fetchusrsintomobile;

  • exitwhenusrs%notfound;

  • insertintotmp(usrmsisdn)values(mobile);

  • endloop;

  • closeusrs;

  • commit;

  • endP_TEST_SQL;

⑵ oracle中SQL動態傳參數問題

open rc;
cursor param_value IS
名稱不一致呢,下面的游標名稱為rc,一開始定義的游標名稱是param_value

fetch rc
into v_column_name, v_table_name;

這樣導致 v_column_name未能取到值,
所以sql_str 中的v_column_name 的值不能取到

⑶ oracle的動態查詢和sql server的動態查詢有什麼區別

DECLARE

strsqlVARCHAR2(100):=『SELECT*FROMempWHEREempno=7788『;

emp_recordemp%ROWTYPE;

BEGIN

EXECUTEIMMEDIATEstrsqlINTOemp_record;

dbms_output.put_line(姓名:||emp_record.ename||,崗位:||emp_record.job);

END;


以上是Oracle的動態sql語法




而SQLServer一般使用的是sp_executesql 函數,它可以執行動態的修改,查詢,刪除功能。

Sp_executesql:執行可以多次重復使用或動態生成的Transact-SQL語句或批處理。Transact-SQL語句或批處理可以包含嵌入參數。
語法:
sp_executesql[@statement=]statement
[
{,[@params=]N'@parameter_namedata_type[OUT|OUTPUT][,...n]'}
{,[@param1=]'value1'[,...n]}
]

⑷ 請問oracle動態游標和靜態游標最大的區別是什麼啊,謝謝

靜態游標指的是程序執行的時候不需要再去解析sql語言,對於sql語句的解析在編譯的時候就可以完成的。動態游標由於含有參數,對於sql語句的解析必須要等到參數確定的時候才能完成。從這個角度來說,靜態游標的效率也比動態游標更高一些。

⑸ 我要寫一個oracle的存儲過程,需要用到一個動態的游標,因為表名和欄位個數都是變的,所以我想傳入sql語句

SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 動態SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打開游標.
10 OPEN v_cursor FOR v_SQL;
11 -- 循環處理.
12 LOOP
13 -- 填充數據.
14 FETCH v_cursor INTO v_name;
15 -- 無數據時 退出循環.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 輸出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 關閉游標.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 發生異常時,如果游標還打開,那麼關閉掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E
PL/SQL procere successfully completed.

⑹ oracle怎麼創建動態sql(急)

好吧,我辛苦下,我來給你寫拼接SQL函數

create table t_a (
c1 varchar2(200),
c2 varchar2(200),
ca varchar2(200),
cb varchar2(200),
cc varchar2(200)
);

create or replace function get_sql_of_tab( c_owner varchar, c_tab_name varchar) return varchar2 as
c_sql varchar2(4000) ;
cursor c1 is
select t.column_name from dba_tab_cols t
where table_name = upper(c_tab_name)
and owner = upper(c_owner)
order by t.column_id;
begin
for r1 in c1 loop
c_sql := c_sql ||' ' || r1.column_name ||',' ;
end loop ;
c_sql := 'SELECT '|| substr(c_sql,1,length(c_sql)-1) || ' FROM '||upper(c_tab_name) ;
return c_sql ;
end get_sql_of_tab ;
/

---------------------以下是PL/SQL命令窗口函數的效果-------------

SQL> select get_sql_of_tab('gxbx','t_a') from al ;

GET_SQL_OF_TAB('GXBX','T_A')
--------------------------------------------------------------------------------
SELECT C1, C2, CA, CB, CC FROM T_A

嘿嘿,動態生產SQL,好吧剩下的你應該明白咋做了。

函數的兩個入參 用戶名 表名,NND忘記說了

⑺ oracle 存儲過程執行動態SQL 返回結果給游標,外部程序獲得dataset結果集。

你這樣寫就可以了,ORACLE存儲過程不需要返回值,只要參數是out就代表為輸出參數了,你給它傳一個游標進去,執行完,這個游標的值就是你查詢的值了。

⑻ oracle,如何通過游標對動態sql的結果集合進行操作

直接寫成,不用定義
for temcur in (select col1,col2....,coln from t1 when rownum =1) loop

.........................
.........................
end loop

⑼ ORACLE存儲過程中的動態游標

你這種, 表名字是是參數的情況下, 需要使用 動態 sql 來處理了。

你需要先定義一個變數, 來存儲你的 sql 語句。

然後 OPEN v_cursor FOR 那個 sql 語句的字元串

下面是一個例子:

SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 動態SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打開游標.
10 OPEN v_cursor FOR v_SQL;
11 -- 循環處理.
12 LOOP
13 -- 填充數據.
14 FETCH v_cursor INTO v_name;
15 -- 無數據時 退出循環.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 輸出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 關閉游標.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 發生異常時,如果游標還打開,那麼關閉掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E

PL/SQL procere successfully completed.

⑽ 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

熱點內容
sql資料庫的埠 發布:2025-01-22 12:20:02 瀏覽:362
安卓最終幻想8怎麼設置中文 發布:2025-01-22 12:19:23 瀏覽:651
怎麼查電腦配置和網路 發布:2025-01-22 12:19:16 瀏覽:586
linuxsnmp查看 發布:2025-01-22 12:17:49 瀏覽:37
安卓數據線怎麼接藍牙 發布:2025-01-22 12:07:29 瀏覽:229
扣扣賬號多少次密碼不正確會被封 發布:2025-01-22 12:07:19 瀏覽:400
python是32位還是64位 發布:2025-01-22 11:51:41 瀏覽:894
鈴聲多多緩存文件夾 發布:2025-01-22 11:51:39 瀏覽:724
java按鍵精靈 發布:2025-01-22 11:49:31 瀏覽:81
python配色 發布:2025-01-22 11:46:40 瀏覽:613