1. 程式人生 > >oracle開發中的儲存過程,遊標,if判斷經典例子

oracle開發中的儲存過程,遊標,if判斷經典例子

1.簡單輸出
create or replace procedure t_xuanze(name in varchar)
as
tname varchar(10);
begin
dbms_output.put_line('this is error!');
end;
(注意:1.沒有declare;2.形參上沒有類型範圍)
///////////////////////////////////////////////
2.形參賦值輸出
create or replace procedure t_xuanze(name in varchar)
as
tname varchar(10):=name;
begin
dbms_output.put_line(tname);
end;
/
注:在as下tname型別為varchar(10),含有範圍
////////////////////////////////////////////
3.帶有if判斷的儲存過程
create or replace procedure t_xuanze(name in varchar)
as
tname varchar(10):=name;
begin
if(tname='emp') then
dbms_output.put_line('this is emp!');
elsif(tname='dept') then
dbms_output.put_line('this is dept!');
else
dbms_output.put_line('this is error!');
end if;
end;
/
4.儲存過程中套遊標列印多行記錄問題
create or replace procedure t_xuanze(name in varchar)
as
tname varchar(10):=name;
begin
if(tname='emp') then
declare
cursor cc is select * from emp where sal>(select avg(sal) from emp where 


deptno=10);
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.empno||'--'||ccrec.ename||'--'||


ccrec.job||'--'||ccrec.sal);
end loop;
close cc;
end;
elsif(tname='dept') then
dbms_output.put_line('this is dept!');
else
dbms_output.put_line('this is error!');
end if;
end;
//////////////////////////////////////////////
5.儲存過程中使用if條件判斷進行遊標列印多行記錄
create or replace procedure t_xuanze(name in varchar)
as
tname varchar(10):=name;
begin
if(tname='emp') then
declare
cursor cc is select * from emp where sal>(select avg(sal) from emp where 


deptno=10);
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.empno||'--'||ccrec.ename||'--'||


ccrec.job||'--'||ccrec.sal);
end loop;
close cc;
end;
elsif(tname='dept') then
declare
cursor cc is select b.dname,count(a.empno) as zongshu from emp a,dept b 


where a.deptno=b.deptno group by b.dname;
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.dname||'----'||ccrec.zongshu);
end loop;
close cc;
end;
else
dbms_output.put_line('this is error!');
end if;
end; 
6.儲存過程中使用傳參後遊標查詢多行記錄顯示
create or replace procedure t_chaxun(dno number)
as
num1 number(10):=dno;
begin
declare
cursor cc is select * from emp where deptno=num1;
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.empno||'---'||ccrec.empno||'---'||


ccrec.sal||'---'||ccrec.deptno);
end loop;
end;
end;

////////////////////////////////////////////////////

2.遊標由淺到深

1.查詢工資大於10號部門平均工資的職工資訊
declare
cursor cc is select * from emp where sal>(select avg(sal) from emp where deptno=10);
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.empno||'--'||ccrec.ename||'--'||ccrec.job||'--'||ccrec.sal);
end loop;
close cc;
end;
2.查詢各個部門的人數
declare
cursor cc is select b.dname,count(a.empno) as zongshu from emp a,dept b where a.deptno=b.deptno group by b.dname;
ccrec cc%rowtype;
begin
open cc;
loop
fetch cc into ccrec;
exit when cc%notfound;
dbms_output.put_line(ccrec.dname||'----'||ccrec.zongshu);
end loop;
close cc;

end;

文章轉載至:http://blog.csdn.net/zhanggaokai/article/details/8816537

相關推薦

oracle開發儲存過程,遊標,if判斷經典例子

1.簡單輸出 create or replace procedure t_xuanze(name in varchar) as tname varchar(10); begin dbms_output.put_line('this is error!'); end; (注

oracle呼叫子儲存過程+遊標迴圈例項

一,有子節點的部門的子節點的排序,呼叫子儲存過程 CREATE OR REPLACE PROCEDURE "PRO_INIT_SORT" AS CURSOR cur_department_all IS

Oracle PL/SQL 執行包裡的儲存過程 遊標輸出引數

oracle PL/SQL 如何執行包裡的儲存過程,儲存過程帶遊標輸出引數 [問題點數:40分] 收藏帖子 回覆 mjlwq 結帖率 87.5% create or replace package pkg_

ORACLE儲存過程變數名和表字段名相同

1.事件概述 今天再寫儲存過程使用變數沒注意到問題,導致SQL執行緩慢,找了許久才發現哪裡有問題。 2.發現問題 在儲存過程中執行下圖sql需要20秒左右,執行計劃發現走了全表掃描,而在儲存過程中相同的SQL不會有問題。 然後我單獨把SQL拿出來跑,將變數名替換成真實資料,1秒

oracle儲存過程小結

1.建立或替換一個儲存過程(PROCEDURE) CREATE [OR REPLACE] PROCEDURE procedure_name [ (parameter [,parameter]) ] IS [declaration_section] BEGIN exec

Oracle 儲存過程 \ 遊標簡單定義和使用

-- Created on 2018/10/12 by 32580 declare -- 定義變數 變數賦值方式為: 變數名 := 值 i INTEGER ; sqls varchar2(500); user_id varchar2(36); l

Oracle儲存過程和函式IS和AS的區別

在儲存過程(PROCEDURE)和函式(FUNCTION)中沒有區別; 在檢視(VIEW)中只能用AS不能用IS; 在遊標(CURSOR)中只能用IS不能用AS。 --記住就行了,沒什麼技巧.-_-.

ORACLE 儲存過程遊標返回多行

1、過程主體 --儲存過程迴圈 ,SELECT INTO 是隱式遊標只能返回一行 CREATE OR REPLACE PROCEDURE P_LOOP_PR ( P_TIME NUMBER) IS A_OVER NUMBER; A_NAME VARCHAR2(20); BE

oracle儲存過程----遊標(cursor)的學習

oracle儲存過程—-遊標(cursor)的學習   今天又學了一個新的概念Cursor ,即遊標。   接上一篇,oracle儲存過程—-儲存過程執行簡單的增刪改查sql ,上一篇中,寫到儲存過程的查詢sql ,當時在寫到查詢的時候,忽然不知道怎麼對查詢

oracle儲存過程詳解

oracle中儲存過程的使用過程是指用於執行特定操作的PL/SQL塊。如果客戶應用經常需要執行特定操作,那麼可以考慮基於這些操作建立過程。通過使用過程,不僅可以簡化客戶應用的開發和維護,而且可以提高應用程式的執行機能。一、 使用過程引數當建立過程時,既可以指定過程引數,也可以

Oracle儲存過程,遊標使用

Oracle儲存過程: 語法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] datatype2,...) IS [AS] PL/SQL BLOCK; mo

檢視Oracle儲存過程長時間被卡住的原因

1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0'; 注意:CUX_OE_ORDER_RPT_PKG 為儲存過程的名稱。 發現 locks=2

oracle 儲存過程 遊標巢狀

這是一段將裝置的GPS資料的工作小時數進行統計的儲存過程,首先通過遊標取出所有裝置資訊,然後對每一臺裝置進行工作小時數統計,其中用到了遊標巢狀 CREATE OR REPLACE PROCEDURE CMTOOLS.proc_statistics_workhour IS

mysql儲存過程+遊標迴圈遍歷 判斷 賦值 等例項一

CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`() BEGIN DECLARE my_recommended INT; DECLARE my_id INT; DECLARE inviteRelationStr VARCHAR(10000)

oracle查詢資料庫儲存過程、索引、檢視等的數量

select count(1) from user_objects where object_type = 'PROCEDURE' select count(1) from user_objects where object_type = 'INDEX' select co

oracle ora-02020 儲存過程dblink使用個數問題

今天晚上加班,有個儲存過程,裡面已經有4個dblink了,但是由於業務需要,還需要再加幾個,在加到第五個的時候,系統忽然丟擲一個錯誤:ora-02020 too many database links in use。諮詢oracle工程師,得出的結論是在oracle的系統引數

Mysql儲存過程3:if語句

sql語句 inpu arguments ted div mysql then for clas --if/else語句 if 條件 then SQL語句 else SQL語句elseifSQL語句 end if; create procedure test1( n

Python的流程控制--if判斷語句

python中的流程控制--if判斷語句1.if 用法舉例: if語句寫法: if expression: statement(s) 註:python使用縮進作為其語句分組的方法,建議使用4個空格。(1)條件為真true (非空的量(string,tuple,list ,set,dic

自己總結的oracle開發需要註意的幾點

表數據 原因 sql 姓名 date 語句 pda 例如 選擇 1、表關聯問題 最好不要關聯3個以上的表格 例子:工資表 a  公積金表 b 醫保表 c如果工資表中 a 存在職工號12365,而b表中沒有12365數據如果關聯條件為 a. 工號=b. 工號(+) 則會出錯,

js哪些值在if判斷是false

哪些是false1:02:false3:null4:undefined5:''或者"" // 空字符串6:NaN以上幾種值在做if判斷時,返回的都是false。那麽其他的值在做if判斷時,返回的都是true。js中哪些值在if判斷是false