標籤: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練習(七)