當前位置:首頁 » 編程語言 » oraclesql動態

oraclesql動態

發布時間: 2025-03-04 12:44:19

㈠ Oracle中「execute immediate」是什麼意思

EXECUTE IMMEDIATE 一般用於 執行動態 sql

例如:
SQL> BEGIN
2 EXECUTE IMMEDIATE ( 'SELECT * FROM test_dysql WHERE id=1' );
3 END;
4 /
PL/SQL procere successfully completed.

execute immediate 是用於在 存儲過程裡面. 動態的執行 SQL 語句。

例如:
有個存儲過程, 用於檢索表的行數。 傳入的參數是 表的名稱。
這種情況下,你
SELECT count(*) FROM v_變數
是無法執行的。

你只能定義一個變數 vsql varchar2(100);
然後
vsql = 'SELECT count(*) FROM ' || v_變數
然後調用 EXECUTE IMMEDIATE 來執行。

動態SQL,意思就是你需要執行的 SQL 語句, 不是固定的。要等運行的時候, 才能確定下來。
也就像上面那個例子,表名是 外部傳入的。

不過 動態SQL 與 EXECUTE IMMEDIATE 主要用在 存儲過程裡面。

假如你是用 C# 或者 Java 之類的開發語言。 訪問資料庫的話。
是用不到 EXECUTE IMMEDIATE 的。

㈡ 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

㈣ 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忘記說了

熱點內容
倉單加密 發布:2025-03-04 15:54:45 瀏覽:898
java架構師面試 發布:2025-03-04 15:54:05 瀏覽:967
安卓手機如何取餓了么會員 發布:2025-03-04 15:53:28 瀏覽:184
c語言int和double 發布:2025-03-04 15:38:04 瀏覽:443
手游編程入門 發布:2025-03-04 15:30:55 瀏覽:899
android進程被殺 發布:2025-03-04 15:30:52 瀏覽:394
火車的無線密碼都是什麼 發布:2025-03-04 15:08:42 瀏覽:455
存單鎖住後如何重置密碼 發布:2025-03-04 15:08:17 瀏覽:569
sqlintchar 發布:2025-03-04 14:55:21 瀏覽:483
切水泥解壓 發布:2025-03-04 14:41:55 瀏覽:501