ORACLE PL/SQL語法應用:遊標,儲存過程,觸發器,函式
--do while迴圈
declare
cursor c is select * from t_t_student order by id;
v_record c%rowtype;
begin
open c;
loop
fetch c into v_record;
exit when(c%notfound);
dbms_output.put_line('編號:'||v_record.id||', 姓名:'||v_record.name||', 年齡'||v_record.age||',電話:'
||v_record.phone||',地址:'||v_record.address);
end loop;
close c;
end;
--while迴圈查詢資料始終不對,不建議使用
declare
cursor c is select * from t_t_student order by id;
v_record c%rowtype;
begin
open c;
fetch c into v_record;
while(c%found) loop
fetch c into v_record;
dbms_output.put_line('編號:'||v_record.id||', 姓名:'||v_record.name||', 年齡'||v_record.age||',電話:'
||v_record.phone||',地址:'||v_record.address);
end loop;
close c;
end;
--for迴圈,基本上普遍使用
declare
cursor c is select * from t_t_student order by id;
v_record c%rowtype;
begin
for v_record in c loop
dbms_output.put_line('編號:'||v_record.id||', 姓名:'||v_record.name||', 年齡'||v_record.age||',電話:'
||v_record.phone||',地址:'||v_record.address);
end loop;
end;
--帶參遊標
declare
cursor c(v_age t_t_student.age%type) is select * from t_t_student where age = v_age order by id;
v_record c%rowtype;
begin
for v_record in c(24) loop
dbms_output.put_line('編號:'||v_record.id||', 姓名:'||v_record.name||', 年齡'||v_record.age||',電話:'
||v_record.phone||',地址:'||v_record.address);
end loop;
end;
--可變遊標,為了改變當前遊標所指資料而使用
declare
cursor c is select * from t_t_student order by id for update;
v_record c%rowtype;
begin
for v_record in c loop
if(v_record.name = '李信') then
update t_t_student set age = 24 where current of c;
end if;
end loop;
commit;
end;
--儲存過程
create or replace procedure p is
cursor c is select * from t_t_student order by id;
v_record c%rowtype;
begin
for v_record in c loop
if(v_record.age=24) then
dbms_output.put_line('編號:'||v_record.id||', 姓名:'||v_record.name||', 年齡'||v_record.age||',電話:'
||v_record.phone||',地址:'||v_record.address);
end if;
end loop;
end;
--呼叫儲存過程
begin
p;
end;
--帶參儲存過程
create or replace procedure p1(v_a in number,v_b number,v_c out number,v_d in out number) is
begin
if(v_a>v_b ) then
v_c := v_a;
else
v_c := v_b;
end if;
v_d := v_d + 10;
end;
--呼叫帶參儲存過程
declare
v_a number := 11;
v_b number := 21;
v_c number;
v_d number := 4;
begin
p1(v_a,v_b,v_c,v_d);
dbms_output.put_line(v_d);
dbms_output.put_line(v_c);
end;
--觸發器
create or replace trigger v_tri
after insert or delete or update on t_t_student for each row
begin
if inserting then
dbms_output.put_line('已執行新增操作');
elsif updating then
dbms_output.put_line('已執行編輯操作');
elsif deleting then
dbms_output.put_line('已執行刪除操作');
end if;
end;
update t_t_student set address = '邯鄲' where id = 39
--修改表搜尋條件的值可以使用觸發器,不建議使用
drop trigger v_tri;
create or replace trigger v_tri
after update on t_t_student for each row
begin
update t_t_student set name = :NEW.name where name = :OLD.name;
end;
update t_t_student set name = '姬只' where name = '姬喜';
--函式
create or replace function v_fun
(age t_t_student.age%type)
return t_t_student.name%type
is
begin
if(age<30) then
return '青年';
elsif(30<age and age<55) then
return '中年';
else
return '老年';
end if;
end;
select name ,v_fun(age) from t_t_student order by id
相關推薦
ORACLE PL/SQL語法應用:遊標,儲存過程,觸發器,函式
--遊標 --do while迴圈 declare cursor c is select * from t_t_student order by id; v_record c%rowtype
oracle pl/sql中 執行帶 OUT 的儲存過程
DECLARE V_result1 VARCHAR2(20); V_result2 VARCHAR2(20); BEGIN Proc_GetSeqence('SubtitleNo',V_res
[oracle]pl/sql in/out變數的使用和過程中過程的呼叫
--in/out 型別變數的使用 以及過程中呼叫過程,獲取out型別的返回值 --建一張表books --簡單過程一 插入一條記錄 createtable books(bookid number,bookname varchar(50),pubhouse varchar(50)); --簡
索引、檢視、遊標、儲存過程和觸發器的理解
1、索引 1-1、索引的概述 我們把一個表中的一列或者多列和列中元素所在表中記錄的實體地址組合成一個新的表。這個表的記錄大致為列的內容和該列所在記錄的實體地址。 1-2、索引的優缺點 www.2cto.com 優
sql server 2000/2005/2008 判斷儲存過程、觸發器、檢視是否存在並刪除
--判斷是否存在addOneArticle這個儲存過程 if Exists(select name from sysobjects where NAME = 'addOneArticle' and type='P') drop procedure addOneArticle --判斷是否存在coun
基於C#中的類SqlCommand物件呼叫SQLServer儲存過程時,儲存過程執行成功,但是物件方法ExecuteNonQuery()返回-1
問題如題。 【下面是一個例子】 1、儲存過程完成的功能是:插入insert一條記錄,相同主鍵的記錄存在時執行更新update的操作。儲存過程正常執行的返回值是1.(不過本文提到的問題和這個返回值沒關係。) 2、在另一個.cs檔案中使用 SqlCommand物件 呼叫方法Ex
ORACLE PL/SQL程式設計之六: 把過程與函式說透(窮追猛打,把根兒都拔起!)
本篇主要內容如下: 6.1 引言 6.2 建立函式 6.3 儲存過程 6.3.1 建立過程 6.3.2 呼叫儲存過程 6.3.3 AUTHID 6.3.4 PRAGMA AUTONOMOUS_TRANSACTION 6.3.5 開發儲存過程步驟 6.3.6
ORACLE PL/SQL程式設計詳解之三:PL/SQL流程控制語句(不給規則,不成方圓)
DECLARE v_first_name employees.first_name%TYPE; v_job_id employees.job_id%TYPE; v_salary employees.salary%TYPE; v_sal_raise NUMBER(3,2); B
ORACLE PL/SQL程式設計之四:把遊標說透
DECLARE DeptRec DEPARTMENTS%ROWTYPE; Dept_name DEPARTMENTS.DEPARTMENT_NAME%TYPE; Dept_loc DEPARTMENTS.LOCATION_ID%TYPE; CURSOR c1 ISSEL
Oracle筆記4-pl/sql-分支/循環/遊標/異常/存儲/調用/觸發器
eal lar 數據交互 實現 after table while gin base 一.pl/sql(Procedure Language/SQL)編程語言 1.概念 PL/SQL是Oracle數據庫對SQL語句的擴展。在普通SQL語句的使用上增加了編程語言的特點,所以P
Oracle的PL SQL語法
PL/SQL 一、函式的應用 1.變數的宣告與賦值 --宣告一個變數,並賦值、列印 declare str varchar2(30); &n
Oracle PL/SQL顯示遊標、隱式遊標、遊標迴圈
dba基礎課程:Oracle PL/SQL顯示遊標、隱式遊標、遊標迴圈 顯示遊標 使用遊標順序 1.宣告遊標 2.開啟遊標 3.讀取遊標 4.資料是否為空,是關閉遊標,否繼續讀取 1.宣告遊標 cursor cur_name[(input
Oracle PL/SQL 執行包裡的儲存過程 遊標輸出引數
oracle PL/SQL 如何執行包裡的儲存過程,儲存過程帶遊標輸出引數 [問題點數:40分] 收藏帖子 回覆 mjlwq 結帖率 87.5% create or replace package pkg_
《Oracle PL/SQL開發指南》學習筆記31——原始碼除錯——函式和過程(第四部分,物件表函式,result_cache子句)
建立一個物件表函式有三個步驟: 1. 定義記錄結構為物件型別 2. 定義集合 3. 定義一個函式來展示如何從PL/SQL上下文向SQL上下文返回集合 1. 建立基本的SQL使用者自定義型別(UDT) 注意:發現竟然不能使用distinct關
《Oracle PL/SQL開發指南》學習筆記31——原始碼除錯——函式和過程(第三部分,並行查詢及管道函式)
1. PARALLEL_ENABLE子句(啟用並行查詢以提高效能) 首次接觸,學習一下: PARALLEL_ENABLE lets you designate a function to support parallel query capabilities. This
《Oracle PL/SQL開發指南》學習筆記31——原始碼除錯——函式和過程(第二部分,函式)
1. 命名塊函式原型 [{EDITIONALBE | NONEDITIONALBE}] FUNCTION function_name ( parameter [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype [, parame
《Oracle PL/SQL開發指南》學習筆記31——原始碼除錯——函式和過程(第一部分,函式呼叫表示法)
這節很基礎,卻發現了Oracle的可愛之處,一個函式呼叫就提供了這麼多選項,學起來真夠累的! 1. 在PL/SQL中呼叫函式表示法 SQL> /* Formatted on 2018/12/4 0:08:00 (QP5 v5.256.13226.355
《Oracle PL/SQL開發指南》學習筆記30——原始碼除錯——錯誤管理(第四部分,utl_call_stack包中的函式)
utl_call_stack包中的函式整理如下: Package Function Description backtrace_depth Returns the number of backtrace items in
PL/SQL 報錯:動態執行表不可訪問,本會話的自動統計被禁止。 在執行選單裡你可以禁止統計,或在v$session,v$sesstat 和vSstatname表裡獲得選擇許可權。
現象: 第一次用PL/SQL Developer連線資料庫,若用sys使用者登入並操作則正常,若用普通使用者比如haishu登入並建立一個表則報錯“動態執行表不可訪問,本會話的自動統計被禁止。在執行選單裡你可以禁止統計,或在v$session,v$sesstat和v$statname表裡獲得選擇許可權。
Oracle PL/SQL進階程式設計(第五彈:包的進階技術)
包過載 包過載實際上就是對包中的子程式的過載,之前我們已經對子程式的過載做過介紹,這裡簡單看下程式碼。 定義包規範: CREATE OR REPLACE PACKAGE emp_action_pkg_overload IS --定義一個增加新員工