-- ###################### pl/sql程式設計(sql*plus中無法執行時在末尾加"\") ######################;
-- 開啟輸出選項
set serveroutput on
;-- 顯示錯誤資訊
show error;
-- 變數賦值 :=
-- pl/sql程式設計的基本示例:
-- 定義部分
declare
v_ename varchar2(20)
; v_sal number;
-- 執行部分
begin
-- 執行語句給變數賦值
select ename, sal into v_ename, v_sal from emp where empno=&no
;-- 在控制台列印變數
dbms_output.put_line(
'雇員名:'
|| v_ename ||
'薪水:'
|| v_sal)
;-- 例外處理
exception
when no_data_found then
dnms_output.put_line(
'未找該員工');
end;
-- ############# 儲存過程 ###############
-- 建立儲存過程(or replace: 存在時替換)
create[or
replace
]procedure 過程名_pro[
(引數)]is
-- 定義變數
begin
執行語句
end;
-- 呼叫儲存過程
exec 過程名[
(引數)];
-- ############# 函式 ###############
-- 建立函式
create
function 函式名_func(引數)
return 返回值型別 is
返回變數名 返回變數具體型別;
-- 例如: 返回值型別為number,返回變數具體型別為number(7, 2)
begin
select 需要返回的字段 into 返回變數名 from 表名 where 字段 = 引數;
return 返回變數名;
end;
-- sql*plus中呼叫函式
var 變數名 變數型別;
call 函式名(引數)
into:變數名;
print 變數名;
-- ############# 包 ###############
-- 建立包
create package 包名 is
procedure 儲存過程名(引數)
;-- 儲存過程宣告
function 函式名(引數)
return 返回值型別;
-- 函式宣告
end;
-- 建立包體
create
orreplace package body 包名 is
-- 儲存過程實現
procedure 儲存過程名(引數)
isbegin
insert
into test1 values
(v_id, v_name)
;end
;-- 函式實現
function 函式名(引數)
return 返回值型別 is
返回變數 返回變數具體型別;
begin
select 需要返回的字段 into 返回變數名 from 表名 where 字段 = 引數;
return 返回變數;
end;
end;
-- 呼叫包
call 包名.儲存過程名(3,
'使用包插入的值');
select 包名.函式名(
'scott'
)from dual;
select
*from test1;
-- 記錄型別(類似結構體)
declare
-- type 記錄變數_type is record (記錄成員);
type emp_record_type is record(name emp.ename%
type
, salary emp.sal%
type
, title emp.job%
type);
emp_record emp_record_type;
begin
select ename, sal, job into emp_record from emp where empno =
7654
;-- 記錄變數.記錄成員
dbms_output.put_line(
'姓名:'
|| emp_record.name ||
', 薪水:'
|| emp_record.salary ||
', 工作:'
|| emp_record.title)
;end
;-- 表型別(類似陣列)
declare
-- type 表型別_type is table of 字段型別 index by binary_integer;
type sp_table_type is
table
of emp.ename%
type
index
by binary_integer;
sp_table sp_table_type;
begin
select ename into sp_table(-1
)from emp where empno =
7654
;-- 記錄變數.記錄成員
dbms_output.put_line(
'姓名:'
|| sp_table(-1
));end
;-- 游標型別(輸入部門號,並顯示該部門所有員工姓名和工資)
declare
-- 定義游標
type sp_emp_cursor is ref cursor
; test_cursor sp_emp_cursor;
-- 定義接受結果的變數
v_ename emp.ename%
type
; v_sal emp.sal%
type
;begin
-- 使游標指向指定結果集
open test_cursor for
select ename, sal from emp;
-- 迴圈取出結果
loop
fetch test_cursor into v_ename, v_sal;
-- 判斷游標是否為空
exit
when test_cursor%notfound;
dbms_output.put_line(
'姓名:'
|| v_ename ||
', 薪水: '
|| v_sal)
;end
loop
;-- 關閉游標
close test_cursor;
end;
Oracle 之PLSQL的常見命令
1.sql structured query language sql有許多關鍵字,以下語句是常用於開頭的語句 alter insert audit lock commit noaudit comment rename create revoke delete select drop update ...
pl sql常見錯誤異常
1.錯 誤 名 稱 錯誤 錯 誤 含 義 2.cursor already open ora 06511 試圖開啟已經開啟的游標 3.invalid cursor ora 01001 試圖使用沒有開啟的游標 4.dup val on index ora 00001 儲存重複值到惟一索引約束的列中 5...
pl sql常見使用心得
1 plsql怎麼設定雙擊表名就查出表資料 選單tool preference browser 右邊的 object type 選擇table double click action 選擇query data 之後選擇ok即可,雙擊表名就查出表資料了 2 如何設定tables sequences 等...