1. ------------------------------------定义使用变量----------------------------------  
2.   
3. --scalar 变量    
4. declare   
5. v_ename varchar2(5);  
6. v_sal number(6,2);  
7. c_tax_rate constant number(3,2) :=0.03;  
8. v_tax_sal number(6,2);  
9. begin  
10. select ename,sal into v_ename,v_sal from emp where empno=&eno;  
11. v_tax_sal:=v_sal*c_tax_rate;  
12. dbms_output.put_line('雇员名:'||v_ename);  
13. dbms_output.put_line('雇员工资:'||v_sal);  
14. dbms_output.put_line('所得税:'||v_tax_sal);  
15. end;  
16. /  
17. --最好使用%type  
18. declare   
19. v_ename emp.ename%type;  
20. v_sal emp.sal%type;  
21. v_tax_rate constant number(3,2) :=0.03;  
22. v_tax_sal v_sal%type;  
23. begin   
24. select ename,sal into v_ename ,v_sal from emp where empno=&no;  
25. v_tax_sal := v_sal*v_tax_rate;  
26. dbms_output.put_line('雇员名:'||v_ename);  
27. dbms_output.put_line('雇员工资:'||v_sal);  
28. dbms_output.put_line('所得税:'||v_tax_sal);  
29. end;  
30. /  
31.   
32.   
33. --composite 变量  
34. 1:pl/sql记录  
35. 记录类型:emp_record_type  
36. 记录变量:emp_record  
37. 记录成员:记录变量.记录成员 emp_record.name  
38. declare  
39. type emp_record_type is record(  
40.      name emp.ename%type,  
41.      salary emp.sal%type,  
42.      title emp.job%type);  
43. emp_record emp_record_type;  
44. begin  
45. select ename,sal,job into emp_record from emp where empno=&no;  
46. dbms_output.put_line('雇员名:'||emp_record.name);  
47. dbms_output.put_line('雇员工资:'||emp_record.salary);  
48. dbms_output.put_line(' 岗位:'||emp_record.title);  
49. end;  
50. /  
51.   
52. 2:pl/sql表  
53. declare  
54. type ename_table_type is table of emp.ename%type  
55. index by binary_integer;  
56. ename_table ename_table_type;  
57. begin  
58. select ename into ename_table(-1) from emp where empno=&no;  
59. dbms_output.put_line('雇员名:'||ename_table(-1));  
60. end;  
61. /  
62.   
63. 3:嵌套表  
64. 4:VARRAY  
65.   
66. --Reference 变量  
67. 1:ref cursor 游标变量   fetch into   
68. declare   
69. type c1 is ref cursor;  
70. dyn_cursor c1;  
71. col1 varchar2(20);  
72. col2 varchar2(20);  
73. begin  
74. open dyn_cursor for select &col1,&col2 from &tab where &con;  
75. fetch dyn_cursor into col1,col2;  
76. dbms_output.put_line('col1:'||col1);  
77. dbms_output.put_line(' col2:'||col2);  
78. close dyn_cursor;  
79. end;  
80.   
81. 2:ref obj_type  
82.   
83.   
84. --lob 变量  
85. clob、blob、nclob、bfile  
86. clob和nclob储存大字符数据  
87. bolb储存大二进制数据  
88. bfile储存指向os文件的指针  
89.   
90. --使用子类型定义变量  
91. subtype subtype_name is base_type [(constrain)] [not null];  
92. declare   
93. subtype my_type is varchar2(20);  
94. v_name my_type(20);  
95. begin  
96. select ename into v_name from emp where empno=&no;  
97. dbms_output.put_line('name:'||v_name);  
98. end;  
99. /  
100.   
101. --非pl/sql变量  
102. 1:sql*plus变量  
103. 2:pro*c/c++变量