oracle-database-11g-plsql-编程实战笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Chap1
DML语句是select 、insert、update、delete和merge
DDL语句是create、alter、drop、rename、truncate、comment
DCL语句是grant、revoke
TCL语句是commit、rollback和savepoint
sql16个基本命令——参考书《OCA认证考试指南(IZ0-051)》清华大学出版社
《oracle database sql language reference 11g》有非遵循格式字符串依赖于格式掩码
chap2
2.1.3 关于语句中有多个单引号时处理:
1、
select'It''s a bird,no plan can''t be 'as pharse
from dual; 此处两个单引号即为一个单引号
2、只能用q 再加’(语句)’
select q'(It's a bird,no plan can't be)'as pharse
from dual;
均输出
PHARSE
----------------------------
It's a bird,no plan can't be
2.1.4
定义变量与申明变量的区别:
定义变量即为变量分配名称并指定数据类型;申明变量首先需要定义变量,然后为其赋值。(赋值也称为初始化)
替代变量前面要加&前缀且若替代变量为字符型时要加两个单引号如’&a’
declare
lv_whom varchar2(20);/*lv-whom为申明变量,a为替代变量,a没有变量类型*/
begin
lv_whom := '&a';
end;
或者
declare
lv_whom varchar2(20);
begin
lv_whom := &a;
end;但是要在输入框中字符加两个单引号
替代变量用define申明,且定义时不可以指定类型,默认为char型
①Define x=emp;
Select * from &x; /*调用要用&,此处不加单引号,解析后即为emp表*/
② define x=adasd;
select'&x' z from dual;/*此处解析后变为select' adasd ' z from dual ,此处必须要有单引号,使adasd作为直接变量,否则出错*/
所以替代变量是否加单引号要根据解析的值来确定
注意:避免在声明块中将任何实参赋给局部变量(constant变量除外),且替代变量与绑定变量都不应该在声明块中赋值
定义为constant的变量,必须在申明块中申明,这意味着常量必须先定义,再给他赋一个不变的值
绑定变量(bind)用var或variable申明
使用冒号(:)作为前缀
var a number
begin
:a := 22;
end;
上面也可以输出结果,下面也可以输出结果,但二者不能同时放一块
print a; /*此处a前面不能加冒号,print可用来输出所有类型的变量*/
另外也可通过exec直接给绑定变量赋值:
SQL> var x number /*必须要先定义再赋值,而替代变量定义时不需指定类型,直接赋值即可*/
SQL> var y number
SQL> exec :x :=1;:y :=2;/*exec 等价于begin … end*/
PL/SQL procedure successfully completed
x
---------
1
y
---------
2
也可以先定义好绑定变量,再将其赋给其他变量:
var a number
begin
:a := 22;
end;
现将其运行再
declare
lv_a number;
begin
lv_a:= :a;
dbms_output.put_line('hello,'||lv_a||'.');
end;
结果:hello,22.
将上面的代码放入到d:\q.sql中用@d:\q.sql;调用即可,但是里面的代码要正确
2.1.5命名块
1、过程块
create or replace procedure abc (aa varchar2) is
begin
dbms_output.put_line('sdhl'||aa);
end;
exec abc('dkjdhhdj');
可能出现
错误一:【ORA-00955: 名称已由现有对象使用】
这个错误说的不仅仅是有可能你有存储过程使用了【abc】,还有可能是你有表名叫【abc】或者其他oracle对象叫【abc】。
说明:其实由于你已经使用了【create or repalace procedure】即使有存储过程叫【abc】也会被覆盖掉,你用下面的命令查询一下,有什么对象叫【abc】,删掉它或者换一个存储过程名字。
【SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME='STUDENT2';】
错误二:过程中的参数不能指定具体长度
2、函数块
错误一:函数里面要有return,不是dbms_output.put_line(但实验之后二者均可以成功创建函数,但是调用时只有return的能没有错误的执行)
create or replace function abc (aa varchar2)
return varchar2is
begin
dbms_output.put_line('sdhl'||aa);
end;
改为
create or replace function abc(aa varchar2) return varchar2is
begin
return'sdhl' || aa;