设为首页 收藏本站
查看: 1393|回复: 0

[经验分享] ORACLE PL/SQL练习(七)

[复制链接]

尚未签到

发表于 2018-9-10 10:26:01 | 显示全部楼层 |阅读模式
  PL/SQL变量的作用域,在当前块内部有效。
  declare
  v_num number(5,2) := 1.23;
  begin
  declare v_num char(10);
  begin
  v_num := 12345;
  dbms_output.put_line(v_num);
  end;
  dbms_output.put_line(v_num);
  end;
  SQL> declare
  2   v_num number(5,2) := 1.23;
  3  begin
  4     declare v_num char(10);
  5     begin
  6       v_num := 12345;
  7       dbms_output.put_line(v_num);
  8     end;
  9   dbms_output.put_line(v_num);
  10  end;
  11  /
  12345
  1.23
  PL/SQL procedure successfully completed.
  替换变量
  目的:性能提高,代码重用
  SQL> select * from emp
  2  where sal > 1700;
  EMPNO ENAME      JOB         MGR HIREDATE             SAL  COMM     DEPTNO
  ----- ---------- --------- ----- ------------------ ----- ----- ----------
  7566 JONES      MANAGER    7839 02-APR-81           2975               20
  7698 BLAKE      MANAGER    7839 01-MAY-81           2850               30
  7782 CLARK      MANAGER    7839 09-JUN-81           2450               10
  7788 SCOTT      ANALYST    7566 19-APR-87           3000               20
  7839 KING       PRESIDENT       17-NOV-81           5000               10
  7902 FORD       ANALYST    7566 03-DEC-81           3000               20
  6 rows selected.
  SQL> select * from emp
  2  where sal > 2000;
  EMPNO ENAME      JOB         MGR HIREDATE             SAL  COMM     DEPTNO
  ----- ---------- --------- ----- ------------------ ----- ----- ----------
  7566 JONES      MANAGER    7839 02-APR-81           2975               20
  7698 BLAKE      MANAGER    7839 01-MAY-81           2850               30
  7782 CLARK      MANAGER    7839 09-JUN-81           2450               10
  7788 SCOTT      ANALYST    7566 19-APR-87           3000               20
  7839 KING       PRESIDENT       17-NOV-81           5000               10
  7902 FORD       ANALYST    7566 03-DEC-81           3000               20
  6 rows selected.

  --Oracle会认为以上两个SQL语句是不一样的,具有不同的SQL>  SQL> select empno,ename,sal,deptno from emp
  2  where empno=&employee_num;
  Enter value for employee_num: 7902
  old   2: where empno=&employee_num               -- set verify on会显示old和new
  new   2: where empno=7902
  EMPNO ENAME        SAL     DEPTNO
  ----- ---------- ----- ----------
  7902 FORD        3000         20
  替换变量使用场景:
  -- WHERE条件
  -- ORDER BY子句
  -- 列表达式
  -- 表名
  -- 整个SELECT语句
  SQL> select empno,ename,job,&coumn_name from emp
  2  where &condition
  3  order by &order_name;
  Enter value for coumn_name: sal
  old   1: select empno,ename,job,&coumn_name from emp
  new   1: select empno,ename,job,sal from emp
  Enter value for condition: sal > 3000
  old   2: where &condition
  new   2: where sal > 3000
  Enter value for order_name: ename
  old   3: order by &order_name
  new   3: order by ename
  EMPNO ENAME      JOB         SAL
  ----- ---------- --------- -----
  7839 KING       PRESIDENT  5000
  --使用'&'符号,每遇到一次替换变量,就要提供一个值,对于同名的变量,要重复输入,很不方便。
  SQL> select empno,ename,job,&column_name from emp
  2  order by &column_name;
  Enter value for column_name: sal
  old   1: select empno,ename,job,&column_name from emp
  new   1: select empno,ename,job,sal from emp
  Enter value for column_name: sal
  old   2: order by &column_name
  new   2: order by sal
  EMPNO ENAME      JOB         SAL
  ----- ---------- --------- -----
  7369 SMITH      CLERK       800
  7900 JAMES      CLERK       950
  7876 ADAMS      CLERK      1100
  7521 WARD       SALESMAN   1250
  7654 MARTIN     SALESMAN   1250
  7934 MILLER     CLERK      1300
  7844 TURNER     SALESMAN   1500
  7499 ALLEN      SALESMAN   1600
  7782 CLARK      MANAGER    2450
  7698 BLAKE      MANAGER    2850
  7566 JONES      MANAGER    2975
  7788 SCOTT      ANALYST    3000
  7902 FORD       ANALYST    3000
  7839 KING       PRESIDENT  5000
  14 rows selected.
  --使用'&&',对相同的替换变量,仅需输入一次。
  SQL> select empno,ename,job,&&column_name
  2  from emp
  3  order by &column_name;
  Enter value for column_name: sal
  old   1: select empno,ename,job,&&column_name
  new   1: select empno,ename,job,sal
  old   3: order by &column_name
  new   3: order by sal
  EMPNO ENAME      JOB         SAL
  ----- ---------- --------- -----
  7369 SMITH      CLERK       800
  7900 JAMES      CLERK       950
  7876 ADAMS      CLERK      1100
  7521 WARD       SALESMAN   1250
  7654 MARTIN     SALESMAN   1250
  7934 MILLER     CLERK      1300
  7844 TURNER     SALESMAN   1500
  7499 ALLEN      SALESMAN   1600
  7782 CLARK      MANAGER    2450
  7698 BLAKE      MANAGER    2850
  7566 JONES      MANAGER    2975
  7788 SCOTT      ANALYST    3000
  7902 FORD       ANALYST    3000
  7839 KING       PRESIDENT  5000
  14 rows selected.
  ACCEPT订制用户提示
  将以下代码保存到C:\Users\John\Desktop\test1.sql文件中,在SQL*Plus中执行
  代码:
  accept dept_num prompt '请输入部门号:'
  select * from emp
  where deptno=&dept_num;
  SQL> start C:\Users\John\Desktop\test1.sql
  请输入部门号:30
  EMPNO ENAME      JOB         MGR HIREDATE             SAL  COMM     DEPTNO
  ----- ---------- --------- ----- ------------------ ----- ----- ----------
  7499 ALLEN      SALESMAN   7698 20-FEB-81           1600   300         30
  7521 WARD       SALESMAN   7698 22-FEB-81           1250   500         30
  7654 MARTIN     SALESMAN   7698 28-SEP-81           1250  1400         30
  7698 BLAKE      MANAGER    7839 01-MAY-81           2850               30
  7844 TURNER     SALESMAN   7698 08-SEP-81           1500     0         30
  7900 JAMES      CLERK      7698 03-DEC-81            950               30
  6 rows selected.
  DEFINE和UNDEFINE
  SQL> define name=ename
  SQL> select &name,sal from emp;
  ENAME        SAL
  ---------- -----
  SMITH        800
  ALLEN       1600
  WARD        1250
  JONES       2975
  MARTIN      1250
  BLAKE       2850
  CLARK       2450
  SCOTT       3000
  KING        5000
  TURNER      1500
  ADAMS       1100
  JAMES        950
  FORD        3000
  MILLER      1300
  14 rows selected.
  变量撤销:
  undefine name


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-570819-1-1.html 上篇帖子: ORACLE PL/SQL练习(六) 下篇帖子: ORACLE RAC11G 更改IP地址
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表