/* =========================================================== | PL/SQL编程 ============================================================ */ --声明变量 DECLARE V_NAME VARCHAR2(20); --一般变量 V_AGE NUMBER(2); v_id SUN.TUSER.USERID%TYPE:=14;--属性变量 v_user SUN.TUSER%ROWTYPE; --行属性变量 BEGIN --赋常量值 V_NAME:='Tom'; V_AGE :=20; DBMS_OUTPUT.put_line('姓名:'||V_NAME||'年龄:'||V_AGE); --SELECT * FROM SUN.TUSER; --通过SELECT INTO给变量赋值 SELECT USERNAME,USERID INTO V_NAME,V_AGE FROM SUN.TUSER; -- WHERE USERID=v_id; DBMS_OUTPUT.put_line('姓名:'||V_NAME||'年龄:'||V_AGE); --给行属性变量赋值 select * into v_user from sun.tuser where userid=v_id; dbms_output.put_line('----------------------------'); dbms_output.put_line(v_user.username); dbms_output.put_line('----------------------------'); EXCEPTION--异常处理 WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('用户编号不正确!'); WHEN OTHERS THEN DBMS_OUTPUT.put_line('错误:'||SQLERRM); END; --循环 /* =========================================================== | 循环语句 ============================================================ */ declare v_count number:=1; --声明变量并赋值 v_sum number:=0; begin /*loop --loop循环 v_sum:=v_sum+v_count; v_count:=v_count+1; exit when v_count>10; end loop; */ /* while v_count<=10 loop --while 循环 v_sum:=v_sum+v_count; v_count:=v_count+1; end loop;*/ for i in 1..10 loop --for循环 v_sum:=v_sum+i; end loop; dbms_output.put_line(v_sum); end; /* =========================================================== | 游标 ============================================================ */ DECLARE --声明游标 CURSOR USER_CUR IS SELECT USERID,USERNAME FROM SUN.TUSER; V_ID SUN.TUSER.USERID%TYPE; V_NAME SUN.TUSER.USERNAME%TYPE; BEGIN --第一种使用游标方式 /* OPEN USER_CUR;--打开游标 LOOP --遍历游标 FETCH USER_CUR INTO V_ID,V_NAME; EXIT WHEN USER_CUR%NOTFOUND; DBMS_OUTPUT.put_line('第'||USER_CUR%ROWCOUNT||'个学生:'||V_ID||' '||V_NAME); END LOOP; close user_cur; --关闭游标 */ --第二种使用方式 for 遍历游标 这种方式不用先打开游标 for v_user in USER_CUR LOOP DBMS_OUTPUT.put_line('第'||USER_CUR%ROWCOUNT|| '个学生:'||v_user.USERID|| ' '||V_USER.USERNAME); END LOOP; END; /* =========================================================== | 存储过程 ============================================================ */ --创建存储过程 CREATE or replace PROCEDURE INSERT_USER ( V_USERID NUMBER, V_NAME VARCHAR2, V_PWD VARCHAR2) IS BEGIN INSERT INTO SUN.TUSER(USERID,USERNAME,PWD) VALUES(V_USERID,V_NAME,V_PWD); END; /* =========================================================== | 存储过程调用 ============================================================ */ --存储过程调用 begin --按位置调用 --INSERT_USER(14,'111','111') ; --按名称 INSERT_USER(V_USERID=>15,V_PWD=>'222',V_NAME=>'222') ; end; --符合规则的存储过程 CREATE PROCEDURE INSERT_USER2 ( V_USERID SUN.TUSER.USERID%TYPE, --使用属性变量 V_NAME SUN.TUSER.USERNAME%TYPE, V_PWD SUN.TUSER.PWD%TYPE, ON_FLAG OUT NUMBER, --输出参数 ON_MSG OUT VARCHAR2 ) IS BEGIN ON_FLAG:=1; ON_MSG:='添加成功!'; INSERT INTO SUN.TUSER(USERID,USERNAME,PWD) VALUES(V_USERID,V_NAME,V_PWD); EXCEPTION --异常处理 WHEN OTHERS THEN ON_FLAG:=SQLCODE; --异常代码 ON_MSG:=SQLERRM; --异常信息输出变量 rollback; END; --调用 DECLARE V_FLAG NUMBER; V_MSG VARCHAR2(100); BEGIN INSERT_USER2(16,'555','555',V_FLAG,V_MSG ); DBMS_OUTPUT.put_line(V_FLAG||V_MSG); -- select * from sun.tuser; END;