create table mytest(name varchar(20),password varchar(30));
create or replace procedure sp_pro2 is
begin
insert into mytest values('fc','123');
end;
檢視錯誤資訊
show error
怎樣呼叫該過程:
1。 exec 過程名 (引數,。。)
2. call 過程名 (引數 )
set server output on
begin
dbms_output.put_line('helloe');
end;
---------------------
declare
v_ename varchar(20);
begin
select ename into v_ename from emp where empno=&aa;
dbms_output.put_line('姓名:'||v_ename);
end;
-----------
create procedure sp_pro3 (spName varchar2,newSal number) is
begin
--執行部分
update emp set sal=newSal where ename=spName;
end;
--dioyong
call sp_pro3('scott','8000');
--------------函式 -------
CREATE or replace function sp_fun1(spName varchar2) return
number is yearsal number(7,2);
begin select sal*12+nvl(comm,0) into yearsal from emp
where ename=spName;
return yearsal;
end;
--diaoyong
var abc number;
call sp_fun1('SCOTT') into : abc;
---------------------------
-------包------------由包規範和包體組成的
--建立一個包sap_pack1
--宣告該包有一個過程和一個函式
create or replace package sp_pack1 is
procedure update_sal(spName varchar2,newsal number);
function annual_income(spName varchar2) return number;
end;
--建立包體---
create or replace package body sp_pack1 is
procedure update_sal(spName varchar2,newsal number) is
begin
update emp set sal=newsal where ename=spName;
end;
function annual_income(spName varchar2) return number
is yearsal number(7,2);
begin select sal*12+nvl(comm,0) into yearsal from emp
where ename=spName;
return yearsal;
end;
end;
---呼叫 ----
call sp_pack1.update_sal('SCOTT',9000);
----------定義並使用變數---================================
-- 標量型別 scalar
v_ename varchar(10);
v_sal number(6,2):=5.4
v_data date;
v_valid boolean not null default false;
---輸入員工號。顯示 name sal tax
declare
v_tax_rate number (3,2):=0.03;
-- v_ename varchar2(5);
v_ename emp.ename%type;
-- v_sal number(7,2);
v_sal emp.sal%type;
v_tax_sal number (7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
--計算所得稅
v_tax_sal:=v_sal*v_tax_rate;
--輸出
dbms_output.put_line('name:'||v_ename||'工資'||v_sal ||'交稅:'||v_tax_sal);
end;
--複合型別 composite
----pl/sql 記錄 類似於高階語言的結構體
--定義一個plsql 記錄型別 emp_record_type
declare
type emp_record_type is record (aname emp.ename%type,salary emp.sal%type,title emp.job%type);
--定義了一個 變數 sp_record 這個變數的型別是emp_record_type
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('員工名:'||sp_record.aname);
end;
--------pl/sql 表 相當於該機語言裡的陣列
--定義一個plsql 表型別 emp_table_type
declare
type emp_table_type is table of emp.ename%type index by binary_integer;
sp_table emp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('員工名--》'||sp_table(0));
end;
--參照型別
---1遊標變數
--例項一 輸入部門號。顯示全部的員工姓名和他的工資
declare
--定義遊標型別
type sp_emp_cursor is ref cursor;
--定義遊標變數
test_cursor sp_emp_cursor;
--定義變數
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
--執行
--把test_cursor 和select 結合
open test_cursor for select ename,sal from emp where deptno=&depno;
--迴圈取出
loop
fetch test_cursor into v_ename,v_sal;
--推斷是否test——cursor 為空
exit when test_cursor%notfound;
dbms_output.put_line('員工名->'||v_ename||'工資->'||v_sal);
end loop;
end;
create or replace procedure sp_pro2 is
begin
insert into mytest values('fc','123');
end;
檢視錯誤資訊
show error
怎樣呼叫該過程:
1。 exec 過程名 (引數,。。)
2. call 過程名 (引數 )
set server output on
begin
dbms_output.put_line('helloe');
end;
---------------------
declare
v_ename varchar(20);
begin
select ename into v_ename from emp where empno=&aa;
dbms_output.put_line('姓名:'||v_ename);
end;
-----------
create procedure sp_pro3 (spName varchar2,newSal number) is
begin
--執行部分
update emp set sal=newSal where ename=spName;
end;
--dioyong
call sp_pro3('scott','8000');
--------------函式 -------
CREATE or replace function sp_fun1(spName varchar2) return
number is yearsal number(7,2);
begin select sal*12+nvl(comm,0) into yearsal from emp
where ename=spName;
return yearsal;
end;
--diaoyong
var abc number;
call sp_fun1('SCOTT') into : abc;
---------------------------
-------包------------由包規範和包體組成的
--建立一個包sap_pack1
--宣告該包有一個過程和一個函式
create or replace package sp_pack1 is
procedure update_sal(spName varchar2,newsal number);
function annual_income(spName varchar2) return number;
end;
--建立包體---
create or replace package body sp_pack1 is
procedure update_sal(spName varchar2,newsal number) is
begin
update emp set sal=newsal where ename=spName;
end;
function annual_income(spName varchar2) return number
is yearsal number(7,2);
begin select sal*12+nvl(comm,0) into yearsal from emp
where ename=spName;
return yearsal;
end;
end;
---呼叫 ----
call sp_pack1.update_sal('SCOTT',9000);
----------定義並使用變數---================================
-- 標量型別 scalar
v_ename varchar(10);
v_sal number(6,2):=5.4
v_data date;
v_valid boolean not null default false;
---輸入員工號。顯示 name sal tax
declare
v_tax_rate number (3,2):=0.03;
-- v_ename varchar2(5);
v_ename emp.ename%type;
-- v_sal number(7,2);
v_sal emp.sal%type;
v_tax_sal number (7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
--計算所得稅
v_tax_sal:=v_sal*v_tax_rate;
--輸出
dbms_output.put_line('name:'||v_ename||'工資'||v_sal ||'交稅:'||v_tax_sal);
end;
--複合型別 composite
----pl/sql 記錄 類似於高階語言的結構體
--定義一個plsql 記錄型別 emp_record_type
declare
type emp_record_type is record (aname emp.ename%type,salary emp.sal%type,title emp.job%type);
--定義了一個 變數 sp_record 這個變數的型別是emp_record_type
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('員工名:'||sp_record.aname);
end;
--------pl/sql 表 相當於該機語言裡的陣列
--定義一個plsql 表型別 emp_table_type
declare
type emp_table_type is table of emp.ename%type index by binary_integer;
sp_table emp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('員工名--》'||sp_table(0));
end;
--參照型別
---1遊標變數
--例項一 輸入部門號。顯示全部的員工姓名和他的工資
declare
--定義遊標型別
type sp_emp_cursor is ref cursor;
--定義遊標變數
test_cursor sp_emp_cursor;
--定義變數
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
--執行
--把test_cursor 和select 結合
open test_cursor for select ename,sal from emp where deptno=&depno;
--迴圈取出
loop
fetch test_cursor into v_ename,v_sal;
--推斷是否test——cursor 為空
exit when test_cursor%notfound;
dbms_output.put_line('員工名->'||v_ename||'工資->'||v_sal);
end loop;
end;