OraclePL/SQL编程基础实例

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;

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐