当前位置:  数据库>oracle

PL/SQL 程序设计简介

    来源: 互联网  发布时间:2017-06-11

    本文导语: ①PL/SQL 程序设计简介 PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对Oracle数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理 在PL/SQL中可以使用的SQL语句有...

①PL/SQL 程序设计简介

PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对Oracle数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理

在PL/SQL中可以使用的SQL语句有:
INSERT,UPDATE,DELETE,SELECT …INTO,COMMIT,ROLLBACK,SAVEPOINT。
提示:在PL/SQL中只能用SQL语句中的DML 部分,不能用DDL 部分,如果要在PL/SQL中使用DDL(如CREATE  table  等)的话,只能以动态的方式来使用

Oracle--plsql复合数据类型

--------------------------------------分割线 --------------------------------------

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

PL/SQL Developer实用技巧分享

--------------------------------------分割线 --------------------------------------

②PL/SQL块结构和组成元素
PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分

PL/SQL块的结构如下:
   
    DECLARE 
    /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/
    BEGIN
    /*  执行部分:  过程及SQL 语句, 即程序的主要部分*/
    EXCEPTION
    /* 执行异常部分: 错误处理*/
    END;

其中执行部分是必须的。
PL/SQL块可以分为三类:
1. 无名块:动态构造,只能执行一次。
2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。
3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

③标识符
PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:
标识符名不能超过30字符;
第一个字符必须为字母;
不分大小写;
不能用’-‘(减号);
不能是SQL保留字。

提示:  一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果

建议的命名方法:
标识符        命名规则  例子
程序变量 V_name          V_name
程序常量 C_Name          C_company_name
游标变量 Name_cursor  Emp_cursor
异常标识 E_name          E_too_many
表类型        Name_table_type  Emp_record_type
表        Name_table  Emp
记录类型 Name_record  Emp_record
替代变量 P_name          P_sal
绑定变量 G_name          G_year_sal

④变量类型
除了CHAR、VARCHAR2、BINARY_INTEGER、NUMBER(p,s)、LONG、DATE、BOOLEAN、ROWID、ROWID这些
还有复合类型
ORACLE 在PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---记录和表

1)记录类型
记录类型是把逻辑相关的数据作为一个单元存储起来,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。
定义记录类型语法如下:
TYPE record_type IS RECORD(
Field1 type1  [NOT NULL]  [:= exp1 ],
Field2 type2  [NOT NULL]  [:= exp2 ],
. . .  . . .
Fieldn typen  [NOT NULL]  [:= expn ] ) ;

例:
1 自定义记录类型

declare
  --定义一个记录类型
  type customer_type is record(
    v_cust_name varchar2(20),
    v_cust_id number(10));

  --声明自定义记录类型的变量
  v_customer_type customer_type;
begin
  v_customer_type.v_cust_name := '刘德华';
  v_customer_type.v_cust_id := 1001;
 
  dbms_output.put_line(v_customer_type.v_cust_name||','||v_customer_type.v_cust_id);
end;

2 自定义记录类型

declare
  --定义一个记录类型
  type emp_record is record(
    v_name varchar2(25),
    v_email varchar2(25),
    v_salary number(8, 2),
    v_job_id varchar2(10));
   
  --声明自定义记录类型的变量
  v_emp_record emp_record;
begin
  --通过 select ... into ... 语句为变量赋值
 select last_name, email, salary, job_id into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 打印变量的值
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' || 
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);
end;

4. 使用 %type 定义变量,动态的获取数据的声明类型

declare
  --定义一个记录类型
  type emp_record is record(
    v_name employees.last_name%type,
    v_email employees.email%type,
    v_salary employees.salary%type,
    v_job_id employees.job_id%type);
   
  --声明自定义记录类型的变量
  v_emp_record emp_record;
begin
  --通过 select ... into ... 语句为变量赋值
 select last_name, email, salary, job_id into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 打印变量的值
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' || 
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);
end;


5. 使用 %rowtype

declare
--声明一个记录类型的变量
  v_emp_record employees%rowtype;
begin
  --通过 select ... into ... 语句为变量赋值
 select * into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 打印变量的值
 dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' || 
                                        v_emp_record.salary || ', ' ||  v_emp_record.job_id  || ', ' || 
                                        v_emp_record.hire_date);
end;

更多详情见请继续阅读下一页的精彩内容:


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 哪儿有sql server驱动程序?
  • SQL 自动审核程序 sqlautoreview
  • 为什么我下载的 “SQL Server 2000 JDBC 驱动程序” 不能安装啊?
  • MYSQL用什么编译嵌入式SQL的程序
  • 请问在哪儿可以找到SQL SERVER 2000 PERONAL的JDBC驱动程序?
  • 急,来者有分,怎样对程序中的SQL语句进行优化
  • jdbc2驱动程序for Access And SQL
  • 求连接SQL SERVER2000的驱动程序!
  • 求jsp连接SQL server 2000的驱动程序
  • 哪位能提供一个支持滚动记录集的MS SQL Server2000的JDBC驱动程序???
  • 在Java程序中怎样动态的检查SQL语句是否正确?
  • SQL Server 2000 JDBC驱动程序介绍,很值得一看!!!
  • sql server数据库有没有专门的jdbc驱动程序,若有,请教怎样获得?
  • SQL Server 7.0或2000 的jdbc驱动程序中提供了连接池的实现吗?
  • 有JDBC的SQL SERVER驱动程序下载吗?
  • 哪里有免费的对应MS SQL server的JAVA数据库驱动程序。
  • 那位由SQL Server 2000的JDBC 2/3驱动程序?
  • Linux下的C++程序怎么连接WIN2000下的SQL Server 2000?或者如何连接MySQL?
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • SQL Server 2012无法连接到WMI提供程序(Cannot connect to WMI provider)解决方案
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,