欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

OraclePL/SQL编程基础实例

程序员文章站 2022-11-25 21:49:41
create table mytest(name varchar(20),password varchar(30)); create or replace procedure...
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;