ORACLE PL/SQL練習(七)

來源:互聯網
上載者:User

標籤:pl/sql   sql   

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 ID,雖然SQL語句很相似。這樣,Oracle會對每個相似的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


本文出自 “技術小站” 部落格,謝絕轉載!

ORACLE PL/SQL練習(七)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.