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;