之前一直没有学习过PL SQL的开发,后看了一段讲解的视频稍有了点了解。
使用PL SQL DEVELOPER进行开发,编写pl sql主要使用test窗口。
--test窗口 begin DBMS_OUTPUT.PUT_LINE('HELLO WORLD'); end; --进行打印 sqlplus 默认不打印 set serveroutput on; --开启打印 --普通变量 DECLARE V_NAME VARCHAR2(20) := '张三'; v_sal number; v_addr varchar2(2000); begin v_sal := 20000; select 'china' into v_addr from dual; DBMS_OUTPUT.PUT_LINE('name:'||v_name||' sal:'||v_sal||', addr:'||v_addr); end; --引用型变量 DECLARE V_NAME emp.ename%type; v_sal emp.sal%type; begin select ename,sal into v_name,v_sal from emp fetch first 1 rows only; DBMS_OUTPUT.PUT_LINE('name:'||v_name||' sal:'||v_sal); end; --记录型变量,引用表中一整行的内容 DECLARE v_emp emp%rowtype; begin select * into v_emp from emp fetch first 1 rows only; DBMS_OUTPUT.PUT_LINE('name:'||v_emp.ename||' sal:'||v_emp.sal); end; --判断分支 DECLARE v_sal emp.sal%type; begin select sal into v_name,v_sal from emp where ename ='张三'; if sal > 10000 then DBMS_OUTPUT.PUT_LINE(v_sal||' 蛮多的'); elsif sal > 5000 then DBMS_OUTPUT.PUT_LINE(v_sal||' 还凑合'); else DBMS_OUTPUT.PUT_LINE(v_sal||' 唉'); end if; end; --loop 循环 DECLARE v_num number := 1; begin loop exit when v_num > 10; --退出条件 DBMS_OUTPUT.PUT_LINE(v_num); v_num := v_num+1; end loop; end; --游标:cursor 声明 打开 读取 关闭 --cursor 游标名(参数列表) is subquery; --open 游标名; --fetch 游标名 into 变量列表; --close 有标名; --属性 --rowcount --获取fetch语句返回的行数 --found --有数据为真 --notfound --与found相反; --isopen --打开为真 declare cursor v_cursor is select ename,sal from emp; v_name emp.ename%type; v_sal emp.sal%type; begin open v_cursor; loop exit when v_cursor%notfound; fetch v_cursor into v_name ,v_sal; DBMS_OUTPUT.PUT_LINE('name:'||v_emp.ename||' sal:'||v_emp.sal); end loop; close v_cursor; end; --带参游标 declare v_cursor(v_deptno emp.deptno%type) cursor is select ename,sal from emp where deptno = v_deptno; v_name emp.ename%type; v_sal emp.sal%type; begin open v_cursor(10); loop --fetch 语句放在判断结束条件之前 fetch v_cursor into v_name ,v_sal; DBMS_OUTPUT.PUT_LINE('name:'||v_emp.ename||' sal:'||v_emp.sal); exit when v_cursor%notfound; end loop; close v_cursor; end; --存储过程 create or replace procedure name is begin end name; --无参存储过程 --plsql > program window > procedure create or replace procedure p_hello as begin DBMS_OUTPUT.PUT_LINE('hello world'); end p_hello; --test window 调用 begin --存储过程名 p_hello; end; --sqlplus 调用 set serveroutput on; --开启打印 exec p_hello; --有参存储过程 create or replace procedure p_print(in_empno in emp.empno%type) as v_name emp.ename%type; v_sal emp.sal%type; begin select ename,sal into v_name,v_sal from emp where empno = in_empno; DBMS_OUTPUT.PUT_LINE('name:'||v_name||' sal:'||v_sal); end p_print; create or replace procedure p_outname(in_empno in emp.empno%type,out_ename out emp.ename%type) as begin select ename into out_ename from emp where empno = in_empno; end p_outname; --调用 --test window declare v_name emp.ename%type; begin p_outname(7566,v_name); DBMS_OUTPUT.PUT_LINE(v_name); end; --