oracle——基础知识

一、Oracle中的数据类型

1、字符串类型。如:char、nchar、varchar2、nvarchar2。
2、数值类型。如:int、number(p,s)、integer、smallint。
3、日期类型。如:date、interval、timestamp。
4、PL/SQL类型。如:pls_integer、binary_integer、binary_double(10g)、binary_float(10g)、boolean。plsql类型是不能在sql环境中使用的,比如建表时。
5、自定义类型。利用 TYPE 定义;一个type 就像是复合变量: 个人理解这个type 就是一个数组一样,不过他返回值只有一个值。而且需要赋值

 

select to_char(sysdate,‘yy-mm-dd hh24:mi:ss‘) from dual   //显示:08-11-07 13:22:42

select to_date(‘2005-12-25,13:25:59‘,‘yyyy-mm-dd,hh24:mi:ss‘) from dual //显示:2005-12-25 13:25:59

而如果把上式写作:select to_date(‘2005-12-25,13:25:59‘,‘yyyy-mm-dd,hh:mi:ss‘) from dual,则会报错,因为小时hh是12进制,13为非法输入,不能匹配。

二、PL/SQL语句块

是一个块结构,划分为:声明部分、  执行部分、  异常处理部分三部分。如下

Declare
声明部分    --位于 Declare 和 Begin 之间
Begin
执行部分    --位于 Begin 和 Exception 之间;无 Exception 时,位于 Begin 和  End 之间
Exception
异常执行部分  --位于 Exception 和 End 之间
End ;  --必须加分号

1、声明变量:

   变量名 [CONSTANT] 变量类型 [[NOT NULL] :=|DEFAULT expression];  //与SqlServer不同,变量名前无需@

注:

  • CONSTANT:常量;
  • NOT NULL:约束条件,若有,则初始化必须赋值;
  • := 赋值符号;直接赋上默认值。

  例: 

declare
a varchar2(20):=‘12‘;
sqltable varchar(200);
sqlText varchar(1000);

 2、执行部分

用于逻辑运算和查询等,常用语句:Dbms_output.put_line(‘1‘);  --类似于SqlServer中的 print。

3、异常处理

 

 

 

 

 

三、基本操作

1、

2、查看字段类型

select * From all_tab_columns where table_name=upper(‘表名‘);

3、is与as

在 存储过程 和 函数 中没有区别;在 视图 中只能用 AS 不能用 IS ;在 游标 中只能用 IS 不能用 AS 。 从其定义也可以看出没什么区别。

create [or replace] procedure procedure_name
 [(parameter_name [in | out | in out] type [,........])]
  {is | as}
begin
   procedure_body
end procedure_name;

 

 

5、EXECUTE IMMEDIATE。代替了以前Oracle8i中DBMS_SQL package包,它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块。

使用技巧:
1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交
如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE
IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据
2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF cursors.
3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号;
4.举例:execute immediate ‘select count(1) from tempA‘。

 

 

 

 

 

 

 

 

 

 

 

 

 



问题:如何让过程返回数据集?

回答:

关键有两点:一是使用out类型的参数。二是该参数使用特殊数据类型:系统引用游标类型(sys_refCursor)。

过程返回数据集,可以在PL/SQL程序中由另一个块或过程接收;

问题:cursor类型与sys_refCursor类型有什么区别?

回答:

Cursor是游标类型,代表是数据集本身,只能在PL/SQL程序中关闭;可以通过游标FOR循环或者定义cursor来完成。

而sys_refCursor代表的是游标的引用,即数据集的引用地址,只能通过open for语句来完成。

两者的最大区别是后者可以将这个地址传递给其它程序。

问题:据说“ref cursor类型”也能够返回数据集,与sys_refCursor有什么关系?

回答: ref cursor是Oracle旧版本中使用的数据类型,用这种对象的缺点在于必须在包中定义;而现在用ys_refCursor类型,可以直接使用。


oracle——基础知识

上一篇:gdb学习[第二版]


下一篇:[Oracle] Group By 语句的扩展 - Rollup、Cube和Grouping Sets