99网
您的当前位置:首页Oracle变量的定义、赋值及使用

Oracle变量的定义、赋值及使用

来源:99网
Oracle变量的定义、赋值及使⽤

⾸先,当在cmd⾥办⼊scott密码提⽰错误时,可以这样改⼀下,scott的解锁命令是: 以system⽤户登录:cmd

sqlplus system/tigertiger

alter user scott identified by \"tiger\" account unlock;--学习块的结构

--学习定义变量(了解数据类型)及赋值--了解:各种PL/SQL块的类型--块的结构

--案例:根据⼯号,输出员⼯姓名 SELECT * FROM emp;--块!

DECLARE

v_empno NUMBER(4); v_ename VARCHAR2(10);BEGIN

v_empno := &请输⼊⼯号; --必须要将查询结果放到变量

SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename);END;

 --异常

DECLARE

v_empno NUMBER(4); v_ename VARCHAR2(10);BEGIN

v_empno := &请输⼊⼯号; --必须要将查询结果放到变量

SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('执⾏出错了,⽼板!');END;

  

--⼩结

DECLARE

--变量区(不能在begin..end中定义)BEGIN

--业务代码区 excetipn --异常捕获区END;

--定义变量(了解数据类型)

--2种:保存⼀个值=简单变量;保存多个值=复合变量

--简单变量类型:char,varchar2,number,date(同时也列类型),boolean,表.字段%type--复合变量:表%rowtype,record

DECLARE

v_empno NUMBER(4); v_ename VARCHAR2(10);

v_job emp.job%TYPE; --如果字段类型改变,脚本不需要改变BEGIN

v_empno := 7566;

SELECT ename,job INTO v_ename,v_job FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename); IF(v_job='MANAGER')THEN

dbms_output.put_line('经理,吃过饭没。'); END IF;

END;

  

--需要同上,将多个变量放到⼀个记录对象中

DECLARE

v_empno NUMBER(4); my_row emp%ROWTYPE;BEGIN

v_empno := 7566;

SELECT * INTO my_row FROM emp WHERE empno=v_empno; dbms_output.put_line(my_row.ename||','||my_row.sal);END;

  

--有时不需要⼀整列,只需要其中⼏个列。此时⽤record

DECLARE

--⾃定义复合类型 my_emp

TYPE my_emp_type IS RECORD( yg_name emp.ename%TYPE, yg_sal emp.sal%TYPE );

my_row my_emp_type; --变量名 数据类型BEGIN

SELECT ename,sal INTO my_row FROM emp WHERE empno=7788; dbms_output.put_line(my_row.yg_name||','||my_row.yg_sal);END;

  

--扩展:Oracle没有boolean类型?

--思考:性别 true=男,false=⼥。缺点?性别=保密。所以Oracle建⽴⽤char(1)替代,1=男2=⼥3=保密4=⼈妖--Oracle的各种集合类型,对应 java的数组。--引⽤变量:在讲解存储过程以后再讲解。--绑定变量(命令窗⼝中执⾏,绑定变量⽤了 :)SQL> var name varchar2(10)SQL> execute :name :='hello';

PL/SQL procedure successfully completedSQL> print name;name---------hello

如图:

declare

l_dept integer := 20; currtime date := sysdate;

l_nam varchar2(20) := to_char(add_months(trunc(sysdate),-12),'yyyymmdd'); -- to_char(sysdate,'MM')-13; type num_list is varray(5) of number;

arr_id num_list := num_list(100,101,123,33,234); begin

l_dept := 30;

dbms_output.put_line(l_dept); dbms_output.put_line(currtime); dbms_output.put_line(l_nam);

dbms_output.put_line(arr_id(1));

end;

变量的定义:l_dept定义的是整型,currtime为⽇期型,

l_nam为字符型并往前退12个⽉的⽇期赋值,⽽-- to_char(sysdate,'MM')-13;会出现负数。type num_list is varray(4) of number;则是定义数据类型为整型的数组,并且数组长度为4,

arr_id num_list := num_list(100,101,123,33,234);则使⽤num_list定义的数组类型定义arr_id变量,并为arr_id赋值。dbms_output.put_line函数则会在DMS Output选项卡中输出,注意:dbms_output.put_line必须放到begin和end之内。

truncate table t4; --清空表⾥的数据declare

op nvarchar2(100);i int ;

j int :=100;begin

while j<200 loop

select nvl(max(id),0) +1 into i from t4; insert into t4 values(i,j,'test'||i); dbms_output.put_line(i); j:=j+1; end loop;end;

-- select * from t4;

    

因篇幅问题不能全部显示,请点此查看更多更全内容