存储过程 函数 游标 顶才有分。

luojihaidao 2009-03-04 06:18:51
谁有存储过程 函数 游标 方面的资料,共享一下, 不胜感谢! 以前学习,但很久没学, 现在想再学习一下。
...全文
146 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjq521521 2009-03-07
  • 打赏
  • 举报
回复
google
wanglei8 2009-03-07
  • 打赏
  • 举报
回复
oracle document
google, baidu, yahoo...
csdn, itpub, qq group...
xiaoxiao1984 2009-03-07
  • 打赏
  • 举报
回复
google
xanaduwpz 2009-03-06
  • 打赏
  • 举报
回复
到哪都顶!为了每天的10分!
Lizme 2009-03-06
  • 打赏
  • 举报
回复
顶,多实践吧!
hanks_gao 2009-03-06
  • 打赏
  • 举报
回复
http://www.netyi.net里面也有好多資料可以下載下來看!
幫樓主頂一個
xiaojun0124 2009-03-06
  • 打赏
  • 举报
回复
顶。。
howardjun 2009-03-06
  • 打赏
  • 举报
回复
------How to create Procedure
CREATE [OR REPLACE] PROCEDURE [schema.]procedure
[ (argument [IN | OUT | IN OUT] datatype
[, argument [IN | OUT | IN OUT] datatype] ...)]
{IS | AS} pl/sql_subprogram_body
  l           PROCEDURE內容必須以BEGIN…END;/框範
l           參數必須以小括號區別 
CREATE OR REPLACE PROCEDURE RENIE_TEST(MNO IN NUMBER
,MNAME IN VARCHAR2) AS
BEGIN
INSERT INTO MYTABLE(MYNO,MYNAME)
VALUES (MNO,MNAME);
END;



------How to create Function

CREATE [OR REPLACE] FUNCTION
[schema.]function
[ (argument [IN] datatype
[, argument [IN] datatype] ...)]
  RETURN datatype {IS | AS} pl/sql_subprogram_body
RETURE VALUE參數只宣告型態,不指定大小 

CREATE OR REPLACE FUNCTION RENIE_TEST ( MM VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN 'FUNC -> ' || MM;
END;
/

------Cursor

1.Static Cursor
宣告在Begin 之前,固定的SELECT 子令.

OPEN CURSOR
LOOP
FETCH INTO P1,P2,P3(or row type(要先宣告))
EXIT WHEN cursor%NOTFOUND;
END LOOP
CLOSE CURSOR

For rowtype(不用先宣告) in cursor loop
End loop;


2.Dynamic Cursor
Begin 前宣告空Cursor,在主體程式中給予動態的SELECT 子令
受宣告限制的SELECT 子令.

create or replace PACKAGE cv IS
type comp_rec is RECORD
(deptno number,
ename varchar(10),
compensation number);
type comp_cv is REF CURSOR return comp_rec;
function emprefc(deptno1 number) return comp_cv;
END;/

create or replace PACKAGE BODY cv IS
function emprefc(deptno1 number) return comp_cv is
temp_cv cv.comp_cv;
begin
if deptno1 > 20 then
open temp_cv for select deptno, ename,
1.25*(sal+nvl(comm,0)) compensation
from emp where deptno = deptno1;
else
open temp_cv for select deptno, ename,
1.15*(sal+nvl(comm,0)) compensation
from emp where deptno = deptno1;
end if;
return temp_cv;
end;
end;/



補充資料
  資料定義語言(DDL)
       CREATE:建立資料庫或資料表
        ALTER:變更資料庫或資料表的結構
        DROP:刪除資料庫或資料表
  資料操作語言(DML)
         SELECT:搜尋資料
        INSERT:新增資料
        UPDATE:更新資料
         DELETE:刪除資料
  資料控制語言(DCL)
         GRANT:授予使用者操作資料的權限
         REVOKE:撤回使用者操作資料的權限
         COMMIT:確定資料的變更
        ROLLBACK :取消資料的變更



yf520gn 2009-03-05
  • 打赏
  • 举报
回复
顶!!
zhangyong369 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fuyou001 的回复:]
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/packages.htm#i2404
顶者有分,顺便给个资料你看看
[/Quote]
哈哈
angelseyes 2009-03-05
  • 打赏
  • 举报
回复
去oracle官网down个pdf文档慢慢看啊
xingkongmori 2009-03-05
  • 打赏
  • 举报
回复
好贴,顶了
tigde 2009-03-05
  • 打赏
  • 举报
回复
itpub出的书里面有一章专门介绍这个的好像,你可以搜搜
Andy__Huang 2009-03-05
  • 打赏
  • 举报
回复
-- 表
create table test (names varchar2(12),
dates date,
num int,
dou double);
-- 视图
create or replace view vi_test as
select * from test;

-- 同义词
create or replace synonym aa
for dbusrcard001.aa;

-- 存储过程
create or replace produce dd(v_id in employee.empoy_id%type)
as
begin

end
dd;

-- 函数
create or replace function ee(v_id in employee%rowtype) return varchar(15)
is
var_test varchar2(15);
begin
return var_test;
exception when others then

end

-- 三种触发器的定义
create or replace trigger ff
after delete
on test
for each row
declare
begin
delete from test;
if sql%rowcount < 0 or sql%rowcount is null then
rais_replaction_err(-20004,"错误")
end if
end


create or replace trigger gg
after insert
on test
for each row
declare
begin
if :old.names = :new.names then
raise_replaction_err(-2003,"编码重复");
end if
end


create or replace trigger hh
after update
on test
for each row
declare
begin
if updating then
if :old.names <> :new.names then
reaise_replaction_err(-2002,"关键字不能修改")
end if
end if
end
--同时三种触发器
create or replace trigger tr
before update or delete or insert
on t
for each row
begin
if inserting then
insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'insert',user);
elsif updating then
insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'update',user);
elsif deleting then
insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'delete',user);
end if;
end;

--触发器例子
CREATE OR REPLACE TRIGGER temp_aiur
AFTER INSERT OR UPDATE ON TEMP
FOR EACH ROW
BEGIN
CASE
WHEN inserting THEN
dbms_output.put_line
('executing temp_aiur - insert');
WHEN updating THEN
dbms_output.put_line
('executing temp_aiur - update');
END CASE;
END;


-- 定义游标
declare
cursor aa is
select names,num from test;
begin
for bb in aa
loop
if bb.names = "ORACLE" then

end if
end loop;

end
cyxin2121921 2009-03-05
  • 打赏
  • 举报
回复
学习
oraclelogan 2009-03-04
  • 打赏
  • 举报
回复
-- 定义游标 
declare
cursor aa is
select names,num from test;
begin
for bb in aa
loop
if bb.names = "ORACLE" then

end if
end loop;

end


论坛里的例子:
create or replace procedure test is
cursor v_cur_6(ids varchar2) is
select * from T where instr(','||ids||',',','||to_char(A)||',')=0;
v_cur_line_6 v_cur_6%ROWTYPE;
begin
open v_cur_6('1,2');
loop

fetch v_cur_6 into v_cur_line_6;
exit when v_cur_6%notfound;
dbms_output.put_line('---------');
end loop;
close v_cur_6;
end;
Andy__Huang 2009-03-04
  • 打赏
  • 举报
回复
参考:
http://topic.csdn.net/u/20090223/11/c3daf75f-cf48-4910-b094-c407fc8faaa7.html?2057732194
oraclelogan 2009-03-04
  • 打赏
  • 举报
回复
csdn上面的资源里面搜索 plsql书籍,很多的,楼主可以学习啊!
hebo2005 2009-03-04
  • 打赏
  • 举报
回复
google
sleepzzzzz 2009-03-04
  • 打赏
  • 举报
回复
ding
加载更多回复(4)

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧