Oracle——基础知识(一)

摘要:
例如:char、nchar、varchar2、nvarchar2。示例:declarvarchar2:='12';sqltablevarchar;sqlTextvarchar;2.执行部分用于逻辑操作和查询。常见语句:Dbms_output。输入_行('1');--类似于SqlServer中的打印。

   一、Oracle中的数据类型

1、字符串类型。如:char、nchar、varchar2、nvarchar2。
2、数值类型。如:int、number(p,s)、integer、smallint。
3、日期类型。如:date、interval、timestamp。

4、其他。RAW-用来存储操作系统使用的原始二进制数据,可用于存储像图像或声音记录这样的信息,但这种数据长度最长度只有255字节.LONG RAW-与LONG类型等价,但存储二进制数据,最长可达2GB个字节.

5、PL/SQL类型。如:pls_integer、binary_integer、binary_double(10g)、binary_float(10g)、boolean。plsql类型是不能在sql环境中使用的,比如建表时。
6、自定义类型。利用 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、异常处理

Exception
  when 异常错误名称1 [ or 异常错误名称2 ] then
    语句段1
  when 异常错误名称3 [ or 异常错误名称4 ] then
    语句段2
  ……
  when others then
    语句段3
End;

4、PL/SQL 嵌套块

 只要是允许执行语句的地方,就可以使用嵌套语句; 嵌套块也被当作一个语句; 标识符可见的范围;

例如:

declare
  v_para varchar2(20) := 'china';
begin
  dbms_output.put_line(v_para);    --外面的块无法看见里面块的变量
  --dbms_output.put_line(v_para_2);  --该语句无法执行,因为无法获取嵌套块中的变量
  declare
    v_para_2 varchar2(20) := 'java';
  begin
    dbms_output.put_line(v_para);
    dbms_output.put_line(v_para_2);
  end;
end;

三、基本操作

1、复杂类型变量 TABLE 和 RECORD

  • TABLE(数组)

类型声明格式:TYPE 新类型的名称 IS TABLE OF 具体的类型 INDEX BY BINARY_INTEGER;

变量声明格式: 变量名 新类型的名称;

例:

declare
type mytable_table_type is table of number index by binary_integer; 声明一个新类型:mytable_table_type
para_table mytable_table_type;  --用新类型创建一个变量
begin
  para_table(0) := 100;
  para_table(-8) := 200;
  para_table(10) := 300;
  dbms_output.put_line(para_table(-8));
end;

和 C# 数组的区别:

  • 不需要指定长度.
  • 下标可以为负数.

命名规则:

  • 定义PLSQL表类型时,用_table_type作为后缀
  • 定义PLSQL表类型的变量时,用_table为后缀
  • RECORD(类)

类型声明格式:

TYPE type_name IS RECORD
(
  field_name1 field_type,
  field_name2 field_type,
  ……
);

变量声明格式:变量名 新类型的名称;

示例:

declare
type myrecord_record_type is record   --创建新类型
(
  first_name varchar2(10),
  last_name varchar2(20),
  salary number(6)
);
para_record myrecord_record_type;  --定义变量
begin
  para_record.first_name := 'a';
  para_record.last_name := 'b';
  para_record.salary := 100;
  dbms_output.put_line(para_record.first_name||' '||para_record.last_name||' '||para_record.salary);
end;

命名规则:
1、定义Record类型时,用_RECORD_TYPE作为后缀
2、定义Record类型的变量时,用_RECORD为后缀

2、 %TYPE 属性 :获取变量类型

获取已经存在的 变量、数据库中的表的字段 用以定义新的变量。

格式: 变量名 已存在的变量/表中字段%TYPE ;   --定义一个与 已存在的变量/表中字段 相同类型的变量

即新声明的变量的类型是 % 前的已存在的变量/表中字段 的类型;

例:

declare
  v_para1 number;
  v_para2 person.name%type;  --person为一个存在的表,name为该表的字段
  v_para3 v_para1%type;  --利用已存在的变量确定新变量的类型。
begin
  v_para2 := 'china';
  v_para3 := 1000;
  dbms_output.put_line('v_para2的值:'||v_para2||' v_para3的值:'||v_para3);
end;

3、%ROWTYPE

与%TYPE作用类似; 变量类型将定义为由数据库的表的字段集合构成的RECORD类型;%ROWTYPE的前缀是数据库的表名;RECORD中的域,与表的字段的名称和数据类型完全相同

格式: 变量名 表名%rowtype;   --定义一个包含表中一条记录中各个字段类型的 RECORD(数组)类型 的变量

例:

declare

  v_para person%rowtype;

begin

  select * into v_para from person  where id = 2;

  dbms_output.put_line(v_para.id||'   '||v_para.name);

end;

 4、if 语句

IF … THEN
  语句1;
elsif…then
  语句2;
elsif…then
  语句3;
else
  语句4;
end if;

       注:是 elsif 而不是 elseif ;

5、loop 语句

loop
  ……
  exit when bool;//当为真时退出循环
  ……
end loop;

6、while语句

while bool loop
……
End loop;

7、查看字段类型

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

8、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;

 

 

 

免责声明:文章转载自《Oracle——基础知识(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇全球最高价格成交的域名排名表使用composer搭建自己的框架 noahbuscher/macaw Twig/Twig catfan/Medoo slince/upload下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORACLE 使用DBMS_METADATA.GET_DDL获取DDL语句

Oracle在9i以后,可以利用DBMS_METADATA.GET_DDL包得到数据库的对象的ddl脚本。如下(SQLPLUS中执行): 1.获取单个的建表、视图和建索引的语法setpagesize0setlong90000setfeedbackoffsetechooffspoolDEPT.sqlselectdbms_metadata.get_ddl(...

后端向前端页面发送变量的方法,可以包含特殊字符(如英文双引号)

处理此问题,方法有2种,下面的第二种是最先发现的,后来发现第一种更简单,都做一下记录,以备不时之需。 第一种: 对于没有特殊字符的后台string变量,输入前台时,直接在后台定义一个protected或public变量,赋值完成后,在前台直接用var value='<%= xxx %>';获取即可。xxx是后台变量名称。 对于有特殊字符的后台s...

centos7安装oracle 11g

一.先安装oracle需要的依赖包: yum install compat-libstdc++-33* elfutils-libelf-devel-* gcc-4.* gcc-c++-4.* libaio-0.* libaio-devel-0.* libgcc-4.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.*...

element-ui表格el-table回显时默认全选数据

1、html代码 <el-table ref="multipleTable":data="tableData"style=" 100%":header-cell-style="{ 'background-color': '#F9F9F9' }"@selection-change="handleSelectionChange" >...

Oracle SQL优化

1、SQL语句尽量用大写的:  因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 2、使用表的别名:   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,就可以减少解析的时间并减少那些由列歧义引起的语法错误。 3.表名的顺序选择要高效: ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名...

oracle字符集的查看和修改

一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响Oracle数据库字符集最重要的参数是NLS_LANG参数。 它的格式如...