Oracle 定义变量总结

原文地址:http://www.cnblogs.com/litian/articles/2056500.html

首先,当在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 completed
name
---------
hello

SQL> print name;
name


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 数据库中,可以使用包(package)或者会话(session)级别的上下文(context)来定义全局变量。 1. 使用包(package)定义全局变量: 首先,在包中声明一个变量,并将其设置为公共(public)的,这样其他包或过程可以访问它。然后,可以在包的任何过程或函数中使用该变量。 以下是一个示例代码: ```sql CREATE OR REPLACE PACKAGE my_package IS -- 声明一个全局变量 g_variable NUMBER; END my_package; / CREATE OR REPLACE PACKAGE BODY my_package IS -- 初始化全局变量 PROCEDURE init_variable IS BEGIN g_variable := 10; END init_variable; -- 使用全局变量 PROCEDURE use_variable IS BEGIN DBMS_OUTPUT.PUT_LINE(g_variable); END use_variable; END my_package; ``` 在上述示例中,"my_package" 包中声明了一个名为 "g_variable" 的全局变量,并在 "init_variable" 过程中初始化为 10。在 "use_variable" 过程中,可以访问并使用该全局变量。 2. 使用会话(session)级别的上下文(context)定义全局变量Oracle 还提供了一种使用会话级别的上下文(context)来定义全局变量的方式。这种方式允许在会话内共享和访问全局变量,但对于其他会话来说是隔离的。 以下是一个示例代码: ```sql -- 创建上下文(context) CREATE OR REPLACE CONTEXT my_context USING my_package; -- 设置全局变量的值 EXECUTE IMMEDIATE 'BEGIN DBMS_SESSION.SET_CONTEXT(''my_context'', ''g_variable'', 10); END;'; -- 在过程中使用全局变量 CREATE OR REPLACE PROCEDURE use_variable IS v_variable NUMBER; BEGIN v_variable := SYS_CONTEXT('my_context', 'g_variable'); DBMS_OUTPUT.PUT_LINE(v_variable); END use_variable; ``` 在上述示例中,首先创建了一个名为 "my_context" 的上下文,其中使用了之前创建的包 "my_package"。然后,通过使用 `DBMS_SESSION.SET_CONTEXT` 过程,将全局变量 "g_variable" 的值设置为 10。最后,在过程 "use_variable" 中使用 `SYS_CONTEXT` 函数来获取并使用该全局变量的值。 这些是在 Oracle 数据库中定义全局变量的两种常见方法。根据具体的需求和场景选择适合的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值