動態sql在儲存過程中的實現

2021-05-26 15:18:36 字數 927 閱讀 3417

這種情況下,如何轉為儲存過程呢?以上面的兩個動態為例,在儲存過程中實現如下:

create or replace procedure my_procedure1(tablename in varchar2,studentname in varchar2, my_cursor1 out       

my_procedure_pkg.ref_cursor) as

sql varchar2(1000);

begin

sql :='select * from ' || my_procedure1.tablename || ' where name=' || my_procedure1.studentname;

open my_procedure1.my_cursor1 for sql;

end my_procedure1;

如果不是 select *  而是delete  from ....那麼儲存過程需要稍作改變,相應部分改為

execute immediately sql;

上面第二個sql的儲存過程如下:

create or replace procedure my_procedure2(ifbynmame in varchar2,my_cursor2 out my_procedure_pkg.ref_cursor) as

begin

if(ifbyname="true") then

open my_cursor2 for

select * from student where age='18' and name='fengfei';

else

open my_cursor2 for

select * from student where age='18';

end my_procedure2;

**都是臨時手寫的,所以可能有錯誤。

oracle 在儲存過程中定義動態sql

表結構 create table item prop pid integer,name varchar2 20 is key prop integer,is sale prop integer,is color prop integer,parent pid integer,parent vid v...

在儲存過程中實現事務

在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...

通過游標在SQL儲存過程中迴圈

今天有個需求要寫乙個儲存過程,需要從乙個表中讀取資料到另外乙個表中,由於是很多行的資料,所以需要迴圈,我琢磨了一下,使用了游標,至於使用游標的好壞,還請大家指點,先建立兩個測試表吧 create table testa id intidentity userchname nvarchar 50 us...