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

oracle動態sql

發布時間: 2023-11-07 17:27:18

1. 關於ORACLE中,動態sql過長,調試時候不方便輸出的解決方案求助~!

create
or
replace
procere
(條件用到的變數
in
varchar2,cursorname
out
ref
cursor)
as
ref
cursor
cur1(條件用到的變數)
is
select
*
from
table
where
條件
定義你的變數
begin
open
cur1(條件用到的變數);
end;
然後再調用這個
過程
.如果不用
動態
條件的話,直接用cursor
類型

2. Oracle 動態SQL中如何參數化表名

表名可用變數,但一般需要用到動態sql,舉例如下:
declare
v_date varchar2(8);--定義日期變數
v_sql varchar2(2000);--定義動態sql
v_tablename varchar2(20);--定義動態表名
begin
select to_char(sysdate,'yyyymmdd') into v_date from al;--取日期變數
v_tablename := 'T_'||v_date;--為動態表命名
v_sql := 'create table '||v_tablename||'
(id int,
name varchar2(20))';--為動態sql賦值
dbms_output.put_line(v_sql);--列印sql語句
execute immediate v_sql;--執行動態sql
end;
執行以後,就會生成以日期命名的表。

3. 如何在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

4. oracle 中動態sql什麼時候用

動態sql一般用在存儲過程中,可以在存儲過程中使用DDL或DML語句,如創建刪除操作。
語法:execute immediate 'DDL或DML語句'

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

給你一個案例對這些,使用execute immediate就可以了,存儲過程和語句塊也是一樣的,自己改一改,沒區別的。

語法格式
EXECUTEIMMEDIATEdynamic_string
[INTO{define_variable[,define_variable]...|record}]
[USING[IN|OUT|INOUT]bind_argument[,[IN|OUT|INOUT]bind_argument]...]
[{RETURNING|RETURN}INTObind_argument[,bind_argument]...];

1,操作DDL語句,這也是動態SQL的常用操作之一
如下所示使用動態SQL創建資料庫表:
DECLARE
l_dync_sqlVARCHAR2(100);
BEGIN
l_dync_sql:='CREATETABLEcux_dync_test(idNUMBER,creation_dateDATE)';
EXECUTEIMMEDIATEl_dync_sql;
END;
2,操作DML語句,使用USING子句可以按照順序將輸入的值綁定到變數,如果動態SQL只有單行輸出的話可以直接使用INTO來接收輸出值,如下所示。
DECLARE
l_dync_sqlVARCHAR2(100);
l_person_nameVARCHAR2(140);
l_ageNUMBER;
BEGIN
l_dync_sql:='SELECTperson_name,ageFROMcux_cursor_testWHEREperson_id=:1';
EXECUTEIMMEDIATEl_dync_sql
INTOl_person_name,l_age--使用into語句接手動態SQL的輸出,如果輸出多行則出錯
USING101;--給綁定變數賦值
dbms_output.put_line('PersonName:'||l_person_name);
dbms_output.put_line('Age:'||l_age);
END;

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

7. oracle中動態sql中的using、into各是什麼作用通俗地講,別用書面語

using 指的是where條件中的變數
into 指的是要獲取的數據變數
比如說
V_SQL_T := 'SELECT SUM(QTY), SUM(COST * QTY)
FROM SALES
WHERE SALE_DATE = :1';

EXECUTE IMMEDIATE V_SQL_T
INTO T_QTY, T_AMT
USING D_SALESDATE;
上面INTO就是要sum(qty)和sum(cost*qty)賦值到t_qty和t_amt兩個變數,using就是把d_salesdate變數代入:1作為條件

8. oracle 中動態sql語句,表名為變數,怎麼解

表名可用變數,但一般需要用到動態sql,舉例如下:
declare
v_date varchar2(8);--定義日期變數
v_sql varchar2(2000);--定義動態sql
v_tablename varchar2(20);--定義動態表名
begin
select to_char(sysdate,'yyyymmdd') into v_date from al;--取日期變數
v_tablename := 'T_'||v_date;--為動態表命名
v_sql := 'create table '||v_tablename||'
(id int,
name varchar2(20))';--為動態sql賦值
dbms_output.put_line(v_sql);--列印sql語句
execute immediate v_sql;--執行動態sql
end;
執行以後,就會生成以日期命名的表。

熱點內容
win7用戶名密碼是什麼 發布:2025-01-31 10:57:38 瀏覽:394
網址埠訪問 發布:2025-01-31 10:49:30 瀏覽:512
javaweb代碼 發布:2025-01-31 10:37:54 瀏覽:259
sqlserver合並 發布:2025-01-31 10:22:27 瀏覽:712
大理伺服器地址 發布:2025-01-31 10:10:52 瀏覽:972
流上傳文件 發布:2025-01-31 10:09:27 瀏覽:40
滿贈演算法 發布:2025-01-31 09:54:27 瀏覽:709
濱州視頻拍攝腳本 發布:2025-01-31 09:48:25 瀏覽:418
光遇出現伺服器已滿是什麼回事 發布:2025-01-31 09:35:29 瀏覽:356
AndroidWindows7 發布:2025-01-31 09:32:17 瀏覽:260