1. 程式人生 > >ORACLE PL/SQL語法應用:遊標,儲存過程,觸發器,函式

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

OraclePL 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$sessionv$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 --定義一個增加新員工