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;