Oracle PL-sql编程手册(sql大全)
Oracle PL SQL 编程规范指南
Oracle PL/SQL 编程规范指南一、PL/SQL 编程规范之大小写就像在 SQL 中一样,PL / SQL 中是不区分大小写的。
其一般准则如下: 关键字(BEGIN, EXCEPTION, END, IF THEN ELSE,LOOP, END LOOP)、数据类型 (VARCHAR2, NUMBER)、内部函数(LEAST, SUBSTR)和用户定义的子程序(procedures, functions,packages),使用大写。
变量名以及 SQL 中的列名和表名,使用小写。
二、PL/SQL 编程规范之空白空白(空行和空格)在 PL/SQL 中如同在 SQL 中一样重要,因为它是提高代码可读性的一个重要因素。
换句话说,可以通过在代码中使用缩进来体现程序的逻辑结构。
以下是一些建议: 在等号或比较操作符的左右各留一个空格; 结构词(DECLARE, BEGIN, EXCEPTION, END,IF and END IF, LOOP and END LOOP) 居左排列。
另外,结构中的嵌套结构要缩进三个空格(使用空格键,而不是 Tab 键); 主要代码段之间用空行隔开; 把同一结构的不同逻辑部分分开写在独立的行, 即使这个结构很短。
例如, IF 和 THEN 被放在同一行, 而 ELSE 和 END IF 则放在独立的行。
三、PL/SQL 编程规范之命名约定使用以下前缀对于避免与关键字和表名列名相冲突是很有帮助的:v_变量名 con_常量名 i_输入参数名,o_输出参数名,io_输入输出参数名 c_游标名 或者 游标名_cur rc_ Ref Cursor 名 r_Record 名 或者 Record 名_rec FOR r_stud IN c_stud LOOP… FOR stud_rec IN stud_cur LOOP type_名称,名称_type (用户定义的类型) t_表名,表名_tab (PL/SQL 表) rec_Record 名,Record 名_rec (Record 变量) e_异常名 (用户定义的异常) 包的名称应该描述包内的存储过程和函数主要所完成的功能存储过程的名称应该描述该存储过程所执行的动作函数的名称应该描述所返回的变量例如:PACKAGE student_admin – admin 后缀可能是用于表示管理功能。
Oracle PL SQL编程教程说明书
About the T utorialPL/SQL is a combination of SQL along with the procedural features of programming languages. It was developed by Oracle Corporation in the early 90's to enhance the capabilities of SQL.PL/SQL is one of three key programming languages embedded in the Oracle Database, along with SQL itself and Java.This tutorial will give you great understanding on PL/SQL to proceed with Oracle database and other advanced RDBMS concepts.AudienceThis tutorial is designed for Software Professionals, who are willing to learn PL/SQL Programming Language in simple and easy steps. This tutorial will give you great understanding on PL/SQL Programming concepts, and after completing this tutorial, you will be at an intermediate level of expertise from where you can take yourself to a higher level of expertise.PrerequisitesBefore proceeding with this tutorial, you should have a basic understanding of software basic concepts like what is database, source code, text editor and execution of programs, etc. If you already have an understanding on SQL and other computer programming language, then it will be an added advantage to proceed.Copyright & DisclaimerCopyright 2018 by Tutorials Point (I) Pvt. Ltd.All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher.We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of our website or its contents including this tutorial. If you discover any errors on our website or inthistutorial,******************************************iT able of ContentsAbout the Tutorial (i)Audience (i)Prerequisites (i)Copyright & Disclaimer (i)Table of Contents ................................................................................................................................... i ii PL/SQL — OVERVIEW . (1)Features of PL/SQL (1)Advantages of PL/SQL (1)PL/SQL — ENVIRONMENT SETUP (3)Text Editor (14)PL/SQL — BASIC SYNTAX (15)PL/SQL — DATA TYPES (19)PL/SQL Scalar Data Types and Subtypes (19)PL/SQL Numeric Data Types and Subtypes (20)PL/SQL Character Data Types and Subtypes (21)PL/SQL Boolean Data Types (22)PL/SQL Datetime and Interval Types (22)PL/SQL Large Object (LOB) Data Types (23)PL/SQL User-Defined Subtypes (24)NULLs in PL/SQL (25)PL/SQL — VARIABLES (26)Variable Declaration in PL/SQL (26)Initializing Variables in PL/SQL (27)Variable Scope in PL/SQL (28)iiAssigning SQL Query Results to PL/SQL Variables (29)PL/SQL — CONSTANTS AND LITERALS (31)Declaring a Constant (31)The PL/SQL Literals (32)PL/SQL — OPERATORS (34)Arithmetic Operators (34)Relational Operators (36)[Comparison Operators (39)Logical Operators (44)PL/SQL Operator Precedence (46)PL/SQL — CONDITIONS (49)IF-THEN Statement (50)IF-THEN-ELSE Statement (53)IF-THEN-ELSIF Statement (55)CASE Statement (56)Searched CASE Statement (58)Nested IF-THEN-ELSE Statements (60)PL/SQL — LOOPS (62)Basic Loop Statement (63)WHILE LOOP Statement (65)FOR LOOP Statement (66)Reverse FOR LOOP Statement (68)Nested Loops (69)Labeling a PL/SQL Loop (71)The Loop Control Statements (72)iiiEXIT Statement (73)The EXIT WHEN Statement (75)CONTINUE Statement (77)GOTO Statement (80)PL/SQL — STRINGS (83)Declaring String Variables (83)PL/SQL String Functions and Operators (84)PL/SQL — ARRAYS (89)Creating a Varray Type (89)PL/SQL — PROCEDURES (94)Parts of a PL/SQL Subprogram (94)Creating a Procedure (95)Executing a Standalone Procedure (96)Deleting a Standalone Procedure (97)Parameter Modes in PL/SQL Subprograms (98)Methods for Passing Parameters (100)PL/SQL — FUNCTIONS (103)Creating a Function (103)Calling a Function (104)PL/SQL Recursive Functions (106)PL/SQL — CURSORS (108)Implicit Cursors (108)Explicit Cursors (110)Declaring the Cursor (112)Opening the Cursor (112)ivFetching the Cursor (112)Closing the Cursor (112)PL/SQL — RECORDS (114)Table-Based Records (114)Cursor-Based Records (115)User-Defined Records (116)PL/SQL — EXCEPTIONS (120)Syntax for Exception Handling (120)Raising Exceptions (121)User-defined Exceptions (122)Pre-defined Exceptions (123)PL/SQL — TRIGGERS (126)Creating Triggers (126)Triggering a Trigger (129)PL/SQL — PACKAGES (130)Package Specification (130)Package Body (130)Using the Package Elements (131)PL/SQL — COLLECTIONS (138)Index-By Table (139)Nested Tables (141)Collection Methods (144)Collection Exceptions (145)vPL/SQL — TRANSACTIONS (147)Starting and Ending a Transaction (147)Committing a Transaction (147)Rolling Back Transactions (148)Automatic Transaction Control (149)PL/SQL — DATE & TIME (150)Field Values for Datetime and Interval Data Types (150)The Datetime Data Types and Functions (151)The Interval Data Types and Functions (155)PL/SQL — DBMS OUTPUT (157)DBMS_OUTPUT Subprograms (157)PL/SQL — OBJECT-ORIENTED (160)Instantiating an Object (161)Member Methods (161)Using Map method (162)Using Order method (164)Inheritance for PL/SQL Objects (166)Abstract Objects in PL/SQL (168)viPL/SQL7The PL/SQL programming language was developed by Oracle Corporation in the late 1980s as procedural extension language for SQL and the Oracle relational database. Following are certain notable facts about PL/SQL:∙PL/SQL is a completely portable, high-performance transaction-processing language. ∙PL/SQL provides a built-in, interpreted and OS independent programming environment. ∙PL/SQL can also directly be called from the command-line SQL*Plus interface . ∙Direct call can also be made from external programming language calls to database. ∙PL/SQL's general syntax is based on that of ADA and Pascal programming language. ∙ Apart from Oracle, PL/SQL is available in TimesTen in-memory database and IBM DB2.Features of PL/SQLPL/SQL has the following features:∙PL/SQL is tightly integrated with SQL. ∙It offers extensive error checking. ∙It offers numerous data types. ∙It offers a variety of programming structures. ∙It supports structured programming through functions and procedures. ∙It supports object-oriented programming. ∙ It supports the development of web applications and server pages. Advantages of PL/SQLPL/SQL has the following advantages:∙ SQL is the standard database language and PL/SQL is strongly integrated with SQL. PL/SQL supports both static and dynamic SQL. Static SQL supports DML operations and transaction control from PL/SQL block. In Dynamic SQL, SQL allows embedding DDL statements in PL/SQL blocks.PL/SQL — OverviewPL/SQL8∙PL/SQL allows sending an entire block of statements to the database at one time. This reduces network traffic and provides high performance for the applications.∙PL/SQL gives high productivity to programmers as it can query, transform, and update data in a database.∙PL/SQL saves time on design and debugging by strong features, such as exception handling, encapsulation, data hiding, and object-oriented data types.∙Applications written in PL/SQL are fully portable.∙PL/SQL provides high security level.∙PL/SQL provides access to predefined SQL packages.∙PL/SQL provides support for Object-Oriented Programming.∙PL/SQL provides support for developing Web Applications and Server Pages.PL/SQL 9In this chapter, we will discuss the Environment Setup of PL/SQL. PL/SQL is not a stand-alone programming language; it is a tool within the Oracle programming environment. SQL* Plus is an interactive tool that allows you to type SQL and PL/SQL statements at the command prompt. These commands are then sent to the database for processing. Once the statements are processed, the results are sent back and displayed on screen.To run PL/SQL programs, you should have the Oracle RDBMS Server installed in your machine. This will take care of the execution of the SQL commands. The most recent version of Oracle RDBMS is 11g. You can download a trial version of Oracle 11g from the following link: Download Oracle 11g Express EditionYou will have to download either the 32-bit or the 64-bit version of the installation as per your operating system. Usually there are two files. We have downloaded the 64-bit version. You will also use similar steps on your operating system, does not matter if it is Linux or Solaris. ∙win64_11gR2_database_1of2.zip ∙ win64_11gR2_database_2of2.zipAfter downloading the above two files, you will need to unzip them in a single directory database and under that you will find the following sub-directories:Step 1Let us now launch the Oracle Database Installer using the setup file. Following is the first screen. You can provide your email ID and check the checkbox as shown in the following screenshot. Click the Next button.PL/SQL — Environment Setup10Step 2You will be directed to the following screen; uncheck the checkbox and click the Continue button to proceed.11Just select the first option Create and Configure Database using the radio button and click the Next button to proceed.12We assume you are installing Oracle for the basic purpose of learning and that you are installing it on your PC or Laptop. Thus, select the Desktop Class option and click the Next button to proceed.13Provide a location, where you will install the Oracle Server. Just modify the Oracle Base and the other locations will set automatically. You will also have to provide a password; this will be used by the system DBA. Once you provide the required information, click the Next button to proceed.14Again, click the Next button to proceed.15Click the Finish button to proceed; this will start the actual server installation.16This will take a few moments, until Oracle starts performing the required configuration.17Here, Oracle installation will copy the required configuration files. This should take a moment:18Once the database files are copied, you will have the following dialogue box. Just click the OK button and come out.19Upon installation, you will have the following final window.Final StepIt is now time to verify your installation. At the command prompt, use the following command if you are using Windows:You should have the SQL prompt where you will write your PL/SQL commands and scripts:PL/SQL20T ext EditorRunning large programs from the command prompt may land you in inadvertently losing some of the work. It is always recommended to use the command files. To use the command files: ∙Type your code in a text editor, like Notepad, Notepad+, or EditPlus, etc.∙Save the file with the .sql extension in the home directory.∙Launch the SQL*Plus command prompt from the directory where you created your PL/SQL file.∙Type @file_name at the SQL*Plus command prompt to execute your program.If you are not using a file to execute the PL/SQL scripts, then simply copy your PL/SQL code and right-click on the black window that displays the SQL prompt; use the paste option to paste the complete code at the command prompt. Finally, just press Enter to execute thecode, if it is not already executed.PL/SQL21In this chapter, we will discuss the Basic Syntax of PL/SQL which is a block-structured language; this means that the PL/SQL programs are divided and written in logical blocks of code. Each block consists of three sub-parts:Every PL/SQL statement ends with a semicolon (;). PL/SQL blocks can be nested within other PL/SQL blocks using BEGIN and END . Following is the basic structure of a PL/SQL block: PL/SQL — Basic Syntax22The 'Hello World' ExampleThe end; line signals the end of the PL/SQL block. To run the code from the SQL command line, you may need to type/ at the beginning of the first blank line after the last line of the code. When the above code is executed at the SQL prompt, it produces the following result: The PL/SQL IdentifiersPL/SQL identifiers are constants, variables, exceptions, procedures, cursors, and reserved words. The identifiers consist of a letter optionally followed by more letters, numerals, dollar signs, underscores, and number signs and should not exceed 30 characters.By default, identifiers are not case-sensitive . So you can use integer or INTEGER to represent a numeric value. You cannot use a reserved keyword as an identifier.The PL/SQL DelimitersA delimiter is a symbol with a special meaning. Following is the list of delimiters in PL/SQL:2324The PL/SQL CommentsProgram comments are explanatory statements that can be included in the PL/SQL code that you write and helps anyone reading its source code. All programming languages allow some form of comments.The PL/SQL supports single-line and multi-line comments. All characters available inside any comment are ignored by the PL/SQL compiler. The PL/SQL single-line comments start with the delimiter -- (double hyphen) and multi-line comments are enclosed by /* and */.When the above code is executed at the SQL prompt, it produces the following result:PL/SQL Program UnitsA PL/SQL unit is any one of the following:∙PL/SQL block∙Function∙Package∙Package bodyPL/SQL25∙Procedure∙Trigger∙Type∙Type bodyEach of these units will be discussed in the following chapters.PL/SQL26End of ebook previewIf you liked what you saw…Buy it from our store @ https://。
Oracle_PL-SQL
Oracle PL/SQL语言初级教程PL/SQL语言基础PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。
通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。
•Oracle PL/SQL语言基础(1)•Oracle PL/SQL语言基础(2)•Oracle PL/SQL语言基础(3)复合数据类型PL/SQL有两种复合数据结构:记录和集合。
记录由不同的域组成,集合由不同的元素组成。
在本文中我们将讨论记录和集合的类型、怎样定义和使用记录和集合。
•复合数据类型(1)•复合数据类型(2)•复合数据类型(3)•复合数据类型(4)•复合数据类型(5)单行函数和组函数函数是一种有零个或多个参数并且有一个返回值的程序。
在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数和组函数。
•单行函数和组函数详解(1)•单行函数和组函数详解(2)•单行函数和组函数详解(3)•单行函数和组函数详解(4)•单行函数和组函数详解(5)表和视图Oracle中表是数据存储的基本结构。
Oracle中引入了分区表和对象表,视图是一个或多个表中数据的逻辑表达式。
本文我们将讨论怎样创建和管理简单的表和视图。
•表和视图(1)•表和视图(2)完整性约束完整性约束是一种规则,不占用任何数据库空间。
完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。
用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。
•完整性约束(1)•完整性约束(2)•完整性约束(3)过程和函数过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。
过程有零个或多个参数,没有返回值。
函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。
plsql 使用手册
PL/SQL 是Oracle 数据库中用于存储过程、函数、触发器和包等程序的编程语言。
以下是PL/SQL 使用手册的参考指南:1、连接Oracle 数据库:在开始编写PL/SQL 程序之前,您需要先连接到Oracle 数据库。
可以通过以下步骤连接到数据库:•运行PLSQL,将弹出数据库连接对话框。
•在对话框中选择要连接的Oracle 服务名,并输入用户名和密码。
•点击“OK”按钮进行连接。
2、登录信息保存功能设置:如果设置了登录信息保存功能,可以通过以下方式连接数据库,不必每次输入用户名和密码。
•进入PLSQL 后,在菜单区点击右键,出现PLSQL 配置界面。
•将“Store with password” 选中即可。
这样,第一次通过用户名/密码登录某数据库后,下次就不用再输入用户名/密码了。
3、切换数据库连接:在PLSQL 中,可以通过以下步骤切换到不同的数据库连接:•在菜单中选择“Change Database” 选项。
•在弹出的对话框中,选择要连接的数据库。
•点击“OK” 按钮完成切换。
4、编写PL/SQL 程序:在连接到数据库后,可以开始编写PL/SQL 程序。
以下是一些常见的PL/SQL 程序示例:•存储过程:用于封装复杂的SQL 查询和数据处理逻辑。
可以使用PL/SQL 编写一个或多个SQL 语句的集合,并将其封装在一个可重用的过程中。
•函数:用于计算并返回一个值。
可以编写一个或多个SQL 语句,将其封装在一个函数中,并使用输入参数来控制计算过程。
•触发器:用于在数据库中执行自动操作。
可以在特定的数据库事件(如插入、更新或删除记录)发生时触发自动执行的操作。
•包:用于封装多个PL/SQL 程序和逻辑单元。
可以将相关的存储过程、函数和数据类型封装在一个包中,以便更好地组织和管理代码。
5、执行SQL 语句:在PLSQL 中,可以使用以下步骤执行SQL 语句:•在菜单中选择“Execute” 或“Run” 选项。
plsql教程
plsql教程PL/SQL是一种与Oracle数据库一起使用的过程化编程语言。
它是操纵、定义和控制Oracle数据库对象的语言,并提供了一种编写存储过程、触发器、函数、包等数据库程序模块的方式。
PL/SQL的基本语法与SQL相似,可以执行SQL语句和存储过程的调用。
以下是一些常用的PL/SQL代码示例:1. 声明变量和常量:```DECLAREnum1 NUMBER := 10;text1 VARCHAR2(20) := 'Hello';constant1 CONSTANT NUMBER := 5;BEGIN-- 执行代码END;```2. 条件语句:```IF num1 > 0 THENNULL;ELSIF num1 = 0 THENNULL;ELSENULL;END IF;```3. 循环语句:```FOR i IN 1..5 LOOPNULL;END LOOP;WHILE num1 > 0 LOOP NULL;num1 := num1 - 1; END LOOP;LOOPNULL;EXIT WHEN num1 = 0; num1 := num1 - 1; END LOOP;```4. 异常处理:```BEGIN-- 执行代码EXCEPTIONWHEN OTHERS THEN -- 处理异常END;```5. 创建存储过程:```CREATE OR REPLACE PROCEDURE procedure_name (param1 IN NUMBER, param2 OUT VARCHAR2) IS-- 变量声明BEGIN-- 执行代码param2 := 'Hello';END;```这些只是PL/SQL语言的一部分功能和用法。
通过学习和实践,您可以掌握更多PL/SQL的知识和技巧,提高数据库编程的效率和质量。
plsql 使用手册
plsql 使用手册(最新版)目录1.PL/SQL简介2.PL/SQL的基本语法3.数据类型与变量4.控制结构5.函数与过程6.触发器与存储过程7.异常处理8.PL/SQL与SQL的交互9.PL/SQL的应用实例10.PL/SQL的优缺点及发展前景正文【PL/SQL 简介】PL/SQL(Procedural Language/Structured Query Language)是一种过程式编程语言,它是为了与 SQL(结构化查询语言)协同工作而设计的。
PL/SQL 通常用于 Oracle 数据库中,用于编写存储过程、触发器、函数等,从而实现对数据库的高级操作和控制。
【PL/SQL 的基本语法】PL/SQL的基本语法包括变量声明、数据类型、控制结构(条件语句、循环语句等)、函数与过程、触发器与存储过程等。
【数据类型与变量】PL/SQL的数据类型与SQL的数据类型基本一致,包括数字类型、字符串类型、日期类型等。
在PL/SQL中,需要先声明变量,再进行使用。
【控制结构】PL/SQL的控制结构包括条件语句(IF-THEN、IF-THEN-ELSE)、循环语句(WHILE、FOR)等,用于实现复杂的逻辑控制。
【函数与过程】函数是一种返回某个值的过程,过程则是一种不返回值的操作。
在PL/SQL 中,函数与过程可以通过参数传递数据,并返回结果。
【触发器与存储过程】触发器是一种在对表执行 INSERT、UPDATE 或 DELETE 操作时自动执行的存储过程。
存储过程是一组预先编译的 SQL 语句,可以实现复杂的业务逻辑。
【异常处理】PL/SQL中可以处理异常,通过EXCEPTION和WHEN子句可以捕获和处理异常情况。
【PL/SQL 与 SQL 的交互】PL/SQL可以与SQL进行交互,例如在PL/SQL过程中调用SQL语句,或者在SQL语句中调用PL/SQL过程。
【PL/SQL 的应用实例】一个典型的PL/SQL应用实例是编写一个存储过程,用于实现数据的增、删、改、查等操作。
oracle-PLSQL-语法详细手册
SQL PL/SQL语法手册第一部分 SQL语法部分Create table 语句语句: CREATE TABLE [schema.]table_name( { column datatype [DEFAULT expr] [column_constraint] ... | table_constraint}[, { column datatype [DEFAULT expr] [column_constraint] ... | table_constraint} ]...)[ [PCTFREE integer] [PCTUSED integer][INITRANS integer] [MAXTRANS integer][TABLESPACE tablespace][STORAGE storage_clause][ RECOVERABLE | UNRECOVERABLE ][ PARALLEL ( [ DEGREE { integer | DEFAULT } ][ INSTANCES { integer | DEFAULT } ])| NOPARALLEL ][ CACHE | NOCACHE ]| [CLUSTER cluster (column [, column]...)] ][ ENABLE enable_clause| DISABLE disable_clause ] ...[AS subquery]表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还可以指定约束条件,存储参数和该表是否是个cluster的一部分.Schema 用来指定所建表的owner,如不指定则为当前登录的用户.Table_name 用来指定所创建的表名,最长为30个字符,但不可以数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突.Column 用来指定表中的列名,最多254个.Datatype 用来指定列中存储什么类型的数据,并保证只有有效的数据才可以输入.column_constraint 用来指定列约束,如某一列不可为空,则可指定为not null.table_constraint 用来指定表约束,如表的主键,外键等.Pctfree 用来指定表中数据增长而在Oracle块中预留的空间. DEFAULT为10%,也就是说该表的每个块只能使用90%,10%给数据行的增大时使用. Pctused 用来指定一个水平线,当块中使用的空间低于该水平线时才可以向该中加入新数据行.Parallel 用来指定为加速该表的全表扫描可以使用的并行查询进程个数. Cache 用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项. Cluster 用来指定该表所存储的 cluster.Tablespace 用来指定用数据库的那个分区来存储该表的数据. Recoverable|Unrecoverable 用来决定是否把对本表数据所作的变动写入Redo 文件.以恢复对数据的操作.As 当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据.例:1) create table mytab1e(mydec decimal,myint inteter)tablespace user_datapctfree 5pctused 30;2) create table mytable2as ( select * from mytable1);create sequence语句语句: CREATE SEQUENCE [schema.]sequence_name[INCREMENT BY integer][START WITH integer][MAXVALUE integer | NOMAXVALUE][MINVALUE integer | NOMINVALUE][CYCLE | NOCYCLE][CACHE integer | NOCACHE][ORDER | NOORDER]序列用来为表的主键生成唯一的序列值.Increment by 指定序列值每次增长的值Start with 指定序列的第一个值Maxvalue 指定产生的序列的最大值Minvalue 指定产生的序列的最小值Cycle 指定当序列值逵到最大或最小值时,该序列是否循环.Cache 指定序列生成器一次缓存的值的个数Order 指定序列中的数值是否按访问顺序排序.例:1) create sequence myseqincrement by 4start with 50maxvalue 60minvalue 50cyclecache 3;2)sql> create sequence new_s;sql>insert into new (new_id,last_name,first_name)values(new_s.nextval,’daur’,’permit’);create view语句语句: CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema.]view_name [(alias [,alias]...)]AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]]视图实际上是存储在数据库上旳 select语句.每次在sql语句中使用视图时,表示该视图的select语句就用来得到需要的数据.Or replace 创建视图时如果视图已存在,有此选项,新视图会覆盖旧的视图.Force 如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限时,也可以建立视图.As subquery 产生视图的select查询语句With check option 如果视图是基于单表的且表中所有的非空列都包含在视图中时,该视图可用于insert和update语句中,本选项保证在每次插入或更新数据后,该数据可以在视图中查到例:create or place view new_vasselect substr(d.d_last_name,1,3),d.d_lastname,d.d_firstname,b.b_start_date,b.b_locationfrom new1 d,new2 bwhere d.d_lastname=b.b_lastname;INSERT语句:语法INSERT INTO [schema.]{table | view | subquery }[@dblink][ (column [, column] ...) ]{VALUES (expr [, expr] ...) | subquery}[WHERE condition]插入单行使用VALUES关键词为新行的每一列指定一个值.如果不知道某列的值,可以使用NULL关键词将其值设为空值(两个连续的逗号也可以表示空值,也可使用NULL关键词)插入一行时试图为那些NOT NULL的列提供一个NULL值,会返回错误信息.举例:插入一条记录到DEPARTMENT表中INSERT INTO DEPARTMENT(DEPARTMENT_ID,NAME,LOCATION_ID)VALUES (01,’COMPUTER’,167)插入多行将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.举例:INSERT INTO ORDER_TEMPSELECTA.ORDER_ID,B.ITEM_ID,,E.FIRST_NAME||'.'||ST_NAME,A.ORDER_DATE,A.SHIP_DATE,D.DESCRIPTION,B.ACTUAL_PRICE,B.QUANTITY,B.TOTALFROM SALES_ORDER A, ITEM B, CUSTOMER C,PRODUCT D, EMPLOYEE EWHERE MONTHS_BETWEEN(TO_DATE(A.ORDER_DATE),TO_DATE('01-7月-91'))>0AND A.CUSTOMER_ID=C.CUSTOMER_IDAND C.SALESPERSON_ID=E.EMPLOYEE_IDAND A.ORDER_ID=B.ORDER_IDAND B.PRODUCT_ID=D.PRODUCT_ID从其它表复制数据:要快速地从一个表向另一个尚不存在的表复制数据,可以使用CREATE TABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中. CREATE TABLE EMPLOYEE_COPYASSELECT *FROM EMPLOYEEUPDATE语句:语法UPDATE [schema.]{table | view | subquery}[@dblink] [alias]SET { (column [, column] ...) = (subquery)| column = { expr | (subquery) } }[, { (column [, column] ...) = (subquery)| column = { expr | (subquery) } } ] ...[WHERE condition]UPDATE语句更新所有满足WHERE子句条件的数据行.同样,该语句可以用SELECT语句检索得到.但SELECT必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次SELECT语句.举例:UPDATE EMPLOYEE_COPSET SALARY=SALARY-400WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYMMDD'))<850101UPDATE ITEM_COP ASET A.ACTUAL_PRICE=(SELECT B.LIST_PRICEFROM PRICE B,SALES_ORDER CWHERE A.PRODUCT_ID=B.PRODUCT_ID ANDA.ORDER_ID=C.ORDER_ID ANDTO_NUMBER(TO_CHAR(C.ORDER_DATE,'YYYYMMDD')) BETWEEN TO_NUMBER(TO_CHAR(B.START_DATE,'YYYYMMDD')) ANDNVL(TO_NUMBER(TO_CHAR(END_DATE,'YYYYMMDD')),29991231))DELETE语句:语法DELETE [FROM] [schema.]{table | view}[@dblink] [alias][WHERE condition]DELETE语句删除所有满足WHERE子句条件的数据行.举例:DELETE FROM itemWHERE ORDER_ID=510TRUNCATE语句:语法TRUNCATE [schema.]table各类Functions:转换函数:函數:TO_CHAR语法:TO_CHAR(number[,format])用途:将一个数值转换成与之等价的字符串.如果不指定格式,将转换成最简单的字符串形式.如果为负数就在前面加一个减号.语法:TO_CHAR(date[,format])用途:将按format参数指定的格式将日期值转换成相应的字符串形式.同样,Oracle提供许多的格式模型,用户可以用它们的组合来表示最终的输出格式.唯一限制就是最终的掩码不能超过22个字符.下表列出了部分日期格式化元素.函數:TO_DATE语法:TO_DATE(string,format)用途:根据给定的格式将一个字符串转换成Oracle的日期值.该函数的主要用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在1~12之间和日期中的天数是否在指定月份的天数内.函數:TO_NUMBER语法:TO_NUMBER(string[,format])用途:该函数将一个字符串转换成相应的数值.对于简单的字符串转换数值(例如几位数字加上小数点).格式是可选的.日期函数函數:ADD_MONTHS语法:ADD_MONTHS(date,number)用途:在日期date上加指定的月数,返回一个新日期.如果给定为负数,返回值为日期date之前几个月的日期.number应当是个整数,如果是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数.例如:SELECT TO_CHAR(ADD_MONTHS(sysdate,1),'DD-MON-YYYY') "Next month"FROM dualNext month-----------19-FEB-2000函數:LAST_DAY语法:LAST_DAY(date)用途:返回日期date所在月份的最后一天的日期.例如:SELECT SYSDATE, LAST_DAY(SYSDATE) "Last",LAST_DAY(SYSDATE) - SYSDATE "Days Left"FROM DUALSYSDATE Last Days Left--------- --------- ----------19-JAN-00 31-JAN-00 12函數:MONTHS_BETWEEN语法:MONTHS_BETWEEN(date1,date2)用途:返回两个日期之间的月份.如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数.否则,返回值是小数,每于1/31月来计算月中剩余天数.如果第二个日期比第一个日期还早,则返回值是负数.例如:SELECT MONTHS_BETWEEN(TO_DATE('02-02-1992', 'MM-DD-YYYY'), TO_DATE('01-01-1992', 'MM-DD-YYYY'))"Months"FROM DUALMonths----------1.03225806SELECT MONTHS_BETWEEN(TO_DATE('02-29-1992', 'MM-DD-YYYY'), TO_DATE('01-31-1992', 'MM-DD-YYYY'))"Months"FROM DUALMonths----------1函數:NEXT_DAY语法:NEXT_DAY(date,day)用途:该函数返回日期date指定若天后的日期.注意:参数day必须为星期,可以星期几的英文完整拼写,或前三个字母缩写,或数字1,2,3,4,5,6,7分别表示星期日到星期六.例如,查询返回本月最后一个星期五的日期.例如:SELECT NEXT_DAY((last_day(sysdate)-7),'FRIDAY')FROM dualNEXT_DAY(---------28-JAN-00函數:ROUND语法:NEXT_DAY(date[,format])用途:该函数把一个日期四舍五入到最接近格式元素指定的形式.如果省略format,只返回date的日期部分.例如,如果想把时间(24/01/00 14:58:41)SELECT to_char(ROUND(sysdate,'HH'),'DD-MON-YY HH24:MI:SS')FROM dualTO_CHAR(ROUND(SYSDATE,'HH'),'DD-MON-YYHH24:MI:SS')-----------------------------------------------------------------24-JAN-00 15:00:00函數:TRUNC语法:TRUNC(date[,format])用途:TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入.例如:SELECT TRUNC(sysdate)FROM dualTRUNC(SYS---------24-JAN-00FLOOR函数:求两个日期之间的天数用;select floor(sysdate - to_date('20080805','yyyymmdd')) from dual;字符函数函數:ASCII语法:ASCII(character)用途:返回指定字符的ASCII码值.如果为字符串时,返回第一个字符的ASCII码值.例如:SELECT ASCII('Z')FROM dualASCII('Z')----------90函數:CHR语法:CHR(number)用途:该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符.例如:SELECT CHR(65)||'BCDEF'FROM dualCHR(65------ABCDEF函數:CONCAT语法:CONCAT(string1,string2)用途:该函数用于连接两个字符串,将string2跟在string1后面返回,它等价于连接操作符(||).例如:SELECT CONCAT(‘This is a’,’ computer’)FROM dualCONCAT('THISISA','------------------This is a computer它也可以写成这样:SELECT ‘This is a’||’ computer’FROM dual'THISISA'||'COMPUT------------------This is a computer这两个语句的结果是完全相同的,但应尽可能地使用||操作符.函數:INITCAP语法:INITCAP(string)用途:该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母.例如:SELECT INITCAP(first_name||'.'||last_name)FROM employeeWHERE department_id=12INITCAP(FIRST_NAME||'.'||LAST_N-------------------------------Chris.AlbertsMatthew.FisherGrace.RobertsMichael.Douglas函數:INSTR语法:INSTR(input_string,search_string[,n[,m]])用途:该函数是从字符串input_string的第n个字符开始查找搜索字符串的第m 次出现,如果没有找到搜索的字符串,函数将返回0.如果找到,函数将返回位置.例如:SELECT INSTR('the quick sly fox jumped over thelazy brown dog','the',2,1)FROM dualINSTR('THEQUICKSLYFOXJUMPEDOVERTHELAZYBROWNDOG','THE',2,1)----------------------------------------------------------31函數:INSTRB语法:INSTRB(input_string,search_string[,n[,m]])用途:该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数.在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的.函數:LENGTH语法:LENGTH(string)用途:该函数用于返回输入字符串的字符数.返回的长度并非字段所定义的长度,而只是字段中占满字符的部分.以列实例中,字段first_name定义为varchar2(15).语法:SELECT first_name,LENGTH(first_name)FROM employeeFIRST_NAME LENGTH(FIRST_NAME)--------------- ------------------JOHN 4KEVIN 5函數:LENGTHB语法:LENGTHB(string)用途:该函数用于返回输入字符串的字节数.对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样.函數:LOWER语法:LOWER(string)用途:该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换.函數:UPPER语法:UPPER(string)用途:该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换.函數:LPAD语法:LPAD(string,length[,’set’])用途:在字符串string的左边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符.语法:SELECT first_name,LPAD(first_name,20,' ')FROM employeeFIRST_NAME LPAD(FIRST_NAME,20,'')--------------- -----------------------------------------JOHN JOHNKEVIN KEVIN函數:RPAD语法:RPAD(string,length[,’set’])用途:在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符.例如:SELECT first_name,rpad(first_name,20,'-')FROM employeeFIRST_NAME RPAD(FIRST_NAME,20,'-')--------------- -----------------------------------------JOHN JOHN----------------KEVIN KEVIN---------------函數:LTRIM语法:LTRIM(string[,’set’])用途:该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.例如:SELECT first_name,ltrim(first_name,'BA')FROM employeeWHERE first_name='BARBARA'FIRST_NAME LTRIM(FIRST_NAM--------------- ---------------BARBARA RBARA函數:RTRIM语法:RTRIM(string[,’set’])用途:该函数从字符串的右边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.具有NULL值的字段不能与具有空白字符的字段相比较.这是因为空白字符与NULL字符是完全不同的两种字符.该函数的另外一个用途是当进行字段连接时去掉不需要的字符.函數:SUBSTR语法:SUBSTR(string,start[,length])用途:该函数从输入字符串中取出一个子串,从start字符处开始取指定长度的字符串,如果不指定长度,返回从start字符处开始至字符串的末尾.函數:REPLACE语法:REPLACE(string,search_set[,replace_set])用途:该函数将字符串中所有出现的search_set都替换成replace_set字符串.可以使用该函将字符串中所有出现的符号都替换成某个有效的名字.如果不指定replace_set,则将从字符串string中删除所有的搜索字符串search_set.例如:SELECT REPLACE('abcdefbdcdabc,dsssdcdrd','abc','ABC')FROM dualREPLACE('ABCDEFBDCDABC,-----------------------ABCdefbdcdABC,dsssdcdrd函數:TRANSLATE语法:TRANSLATE(string,search_set,replace_set)用途:该函数用于将所有出现在搜索字符集search_set中的字符转换成替换字符集replace_set中的相应字符.注意:如果字符串string中的某个字符没有出现在搜索字符集中.则它将原封不动地返回.如果替换字符集replace_set比搜索字符集search_set小,那么搜索字符集search_set中后面的字符串将从字符串string中删除.例如:SELECTTRANSLATE('GYK-87M','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',9999999999xxxxxxxxxxxxxx')FROM dualTRANSL------xx-99x数值函数函數:ABS语法:ABS(number)用途:该函数返回数值number的绝对值.绝对值就是一个数去掉符号的那部分.函數:SQRT语法:SQRT(number)用途:该函数返回数值number的平方根,输入值必须大于等于0,否则返回错误.函數:CEIL语法:CEIL(number)用途:该函数返回大于等于输入值的下一个整数.函數:FLOOR语法:FLOOR(number)用途:该函数返回小于等于number的最大整数.语法:MOD(n,m)用途:该函数返回n除m的模,结果是n除m的剩余部分.m,n可以是小数,负数.函數:POWER语法:POWER(x,y)用途:该函数执行LOG函数的反操作,返回x的y次方.函數:ROUND语法:ROUND(number,decimal_digits)用途:该函数将数值number四舍五入到指定的小数位.如果decimal_digits为0,则返回整数.decimal_digits可以为负数.函數:TRUNC语法:TRUNC(number[,decimal_pluces])用途:该函数在指定的小数字上把一个数值截掉.如果不指定精度,函数预设精度为0. decimal_pluces可以为负数.语法:SIGN(number)用途:该函数返回number的符号,如果number为正数则返回1,为负数则返回-1,为0则返回0.函數:SIN语法:SIN(number)用途:该函数返回弧度number的正弦值.函數:SINH语法:SINH(number)用途:该函数返回number的返正弦值.函數:COS语法:COS(number)用途:该函数返回弧度number的三角余弦值.要用角度计算余弦,可以将输入值乘以0.01745转换成弧度后再计算.语法:COSH(number)用途:该函数返回输入值的反余弦值.函數:TAN语法:TAN(number)用途:该函数返回弧度number的正切值.函數:TANH语法:TANH(number)用途:该函数返回数值number的反正切值.函數:LN语法:LN(number)用途:该函数返回number自然对数.函數:EXP语法:EXP(number)用途:该函数返回e(2.71828183)的number次方.该函数执行自然对数的反过程.函數:LOG语法:LOG(base,number)用途:该函数返回base为底,输入值number的对数.单行函数:单行函数中可以对任何数据类型的数据进行操作.函數:DUMP语法:DUMP(expression[,format[,start[,length]]])用途:.SELECT DUMP('FARRELL',16)FROM dualDUMP('FARRELL',16)----------------------------------Typ=96 Len=7: 46,41,52,52,45,4c,4c函數:GREATEST语法:GREATEST(list of values)用途:该函数返回列表中项的最大值.对数值或日期来说,返回值是最大值或最晚日期,如果列表中包含字符串,返回值是按字母顺序列表中的最后一项.例如:SELECT GREATEST(123,234,432,112)FROM dualGREATEST(123,234,432,112)-------------------------432函數:LEAST语法:LEAST(list of values)用途:该函数返回列表中项的最小值.对数值或日期来说,返回值是最小值或最早日期,如果列表中包含字符串,返回值是按字母顺序列表中的第一项.例如:SELECT LEAST(sysdate,sysdate-10)FROM dualLEAST(SYS---------10-JAN-00函數:NVL语法:NVL(expression,replacement_value)用途:如果表达式不为空值,函数返回该表达式的值,如果是空值,就返回用来替换的值.例如:SELECT last_name,NVL(TO_CHAR(COMMISSION),'NOT APPLICABLE')FROM employeeWHERE department_id=30LAST_NAME NVL(TO_CHAR(COMMISSION),'NOTAPPLICABLE')--------------- ----------------------------------------ALLEN 300WARD 500MARTIN 1400BLAKE NOT APPLICABLE多行函数组函数可以对表达式的所有值操作,也可以只对其中不同值进行操作,组函数的语法如下所示:function[DISTINCT|ALL expression]如果既不指定DISTINCT,也不指定ALL,函数将对查询返回的所有数据行进行操作.不能在同一个SELECT语句的选择列中同时使用组函数和单行函数.函數:AVG语法:AVG([DISTINCT|ALL] expression)用途:对查询返回的数据行求平均值.例如:SELECT AVG(sal) "Average"FROM empAverage----------2073.21429函數:COUNT语法:COUNT([DISTINCT|ALL] expression)用途:计算表达式的个数.要计算EMP表中雇员的个数.例如:SELECT COUNT(deptno)FROM empCOUNT(DEPTNO)-------------14SELECT COUNT(distinct deptno)FROM empCOUNT(DISTINCTDEPTNO)---------------------3函數:MAX语法:MAX([DISTINCT|ALL] expression)用途:对查询返回的行集求最大值.如果有多个最大值,将所有均返回.要检索公司中最高工资的雇员.语法:SELECT ename,salFROM empWHERE sal=(select max(sal)FROM emp)ENAME SAL---------- ---------KING 5000函數:MIN语法:MIN([DISTINCT|ALL] expression)用途:对查询返回的行集求最小值.如果有多个最小值,将所有均返回.例如:SELECT MIN(last_name)FROM employeeMIN(LAST_NAME)---------------ADAMS函數:SUM语法:SUM([DISTINCT|ALL] expression)用途:计算查询返回的所有非空数值的总和.如果返回的数据都是空值,则该函数也返回空值.例如:SELECT SUM(salary)"Total"FROM employeeWHERE department_id=10Total---------8750函數:VARIANCE语法:VARIANCE([DISTINCT|ALL] expression)用途:该函数计算返回所有行的统计方差.例如:SELECT VARIANCE(salary)FROM employeeVARIANCE(SALARY)----------------TABLE: LOCATION 部门地址表 -------------------- -------- ----LOCATION_ID NOT NULL NUMBER(3) 地址IDREGIONAL_GROUP VARCHAR2(20) 地址名TABLE: DEPARTMENT 部门名称表 -------------------- -------- ----DEPARTMENT_ID NOT NULL NUMBER(2) 部门IDNAME VARCHAR2(14) 部门名称 LOCATION_ID NUMBER(3) 地址ID(LOCATION.LOCATION_ID)TABLE: JOB 工种表-------------------- -------- ----JOB_ID NOT NULL NUMBER(3) 工种IDFUNCTION VARCHAR2(30) 工种名称 TABLE: EMPLOYEE 雇员信息表 -------------------- -------- ----EMPLOYEE_ID NOT NULL NUMBER(4) 雇员IDLAST_NAME VARCHAR2(15)FIRST_NAME VARCHAR2(15)MIDDLE_INITIAL VARCHAR2(1)JOB_ID NUMBER(3) 工种ID(JOB.JOB_ID)MANAGER_ID NUMBER(4) 领导ID(EMPLOYEE.EMPLOYEE_ID)HIRE_DATE DATE 雇佣日期 SALARY NUMBER(7,2) 薪水COMMISSION NUMBER(7,2) 佣金DEPARTMENT_ID NUMBER(2) 部门ID(DEPARTMENT.DEPARTMENT_ID)TABLE: SALARY_GRADE 薪资等级表 -------------------- -------- ----GRADE_ID NOT NULL NUMBER(3) 等级IDLOWER_BOUND NUMBER(7,2) 最低工资 UPPER_BOUND NUMBER(7,2) 最高工资 TABLE: PRODUCT 产品信息表 -------------------- -------- ----PRODUCT_ID NOT NULL NUMBER(6) 品号DESCRIPTION VARCHAR2(30) 品名TABLE: PRICE 产品价格表 -------------------- -------- ----PRODUCT_ID NOT NULL NUMBER(6) 品号(PRODUCT.PRODUCT_ID)LIST_PRICE NUMBER(8,2) 价格MIN_PRICE NUMBER(8,2) 最低价格 START_DATE NOT NULL DATE 生效日期 END_DATE DATE 失效日期 TABLE: CUSTOMER 客户信息表 -------------------- -------- ----CUSTOMER_ID NOT NULL NUMBER(6) 客户ID(CUSTOMER.CUSTOMER_ID)NAME VARCHAR2(45) 客户名ADDRESS VARCHAR2(40) 客户地址 CITY VARCHAR2(30) 城市STATE VARCHAR2(2) 州ZIP_CODE VARCHAR2(9) 邮编AREA_CODE NUMBER(3) 区号PHONE_NUMBER NUMBER(7) 电话号码 SALESPERSON_ID NUMBER(4) 销售员ID(EMPLOYEE.EMPLOYEE_ID)CREDIT_LIMIT NUMBER(9,2) 信用限制 COMMENTS LONG 备注TABLE: SALES_ORDER 订单单头表 -------------------- -------- ----ORDER_ID NOT NULL NUMBER(4) 订单IDORDER_DATE DATE 订单日期 CUSTOMER_ID NUMBER(6) 客户ID(CUSTOMER.CUSTOMER_ID)SHIP_DATE DATE 出货日期 TOTAL NUMBER(8,2) 总金额TABLE: ITEM 订单单身表 -------------------- -------- ----ORDER_ID NOT NULL NUMBER(4) 订单ID(SALES_ORDER.ORDER_ID)ITEM_ID NOT NULL NUMBER(4) 订单行号 PRODUCT_ID NUMBER(6) 品号(PRODUCT.PRODUCT_ID)ACTUAL_PRICE NUMBER(8,2) 实际价格 QUANTITY NUMBER(8) 订单数量 TOTAL NUMBER(8,2) 总金额第二部分 PL/SQL语法部分PL/SQL语言简介(本讲义之所有程序均调式通过)首先我们看一个简单之例子,下面这个例子是统计从1至100的总和. declarei number:=0; /*声明变量井给初值*/t number:=1;error_message exception; /*声明一个出错处理*/beginfor t in 1..100 loopi:=i+t;end loop;if i>=5050 thenraise error_message; /*引发错误处理*/elseinsert into c_nt(c_t) values(i);end if;exceptionwhen error_message theninsert into c_nt(c_t) values(0);end;从上例中可以看出PL/SQL语法的一般规则.PL/SQL中语句以分号(;)结尾.开始程序块的PL/SQL语句(如IF…或BEGIN语句)没有分句.文本值括在单引号(‘ ‘)内,而不是(“ “).过程只允许最后有一个出口..PL/SQL程序可以分为三个部分DECLARE部分用于变量、常量、函数、过程、Cursor.BEGIN部分包含PL/SQL块中要执行的代码用于程序处理,其中可以调用函数、过程.Exception 部分用于出错处理.下面我们再看一个例子:declarei number :=1;t number :=1;p number :=1;/*create table c_ny(c_t number,cou_t number);*/function aa(xx number)return number is /* define function*/tt number;ct number:=1;j number:=1;beginwhile j<=xx loopct:=ct+j;j:=j+1;end loop;return ct;end aa;begin/*create table c_nt(c_t number,cou_t number);*/commit;while i<=200 loopt:=t+i;i:=i+1;p:=aa(i); /* calling function*/insert into c_nt values(t,p);commit;end loop;end;/说明:1.在定义变量可以赋初值,赋初值有两种方法,一为上程序所示,另一种为如下所示:DeclareI number default 92;T number default 0;2.定义常量DeclareI constant number:=1;T constant number:=9;3.定义函数function function_name(parameter type)return type is …declare variantbegin……end function_name;在上面的例子中我们定义了一个函数aa,在begin模块部分引用了此函数aa().4.定义过程procedure procedure_name(parameter IN type) is…declare variantbegin……exception……end procedure_name;见下例:declare/*t_emp c_nt%rowtype;*/i number:=1;t number:=1;procedure te_t(t_t number) is /*定义一个函数*/begininsert into c_nt1(t_1) values(t_t);end te_t;beginfor i in 1..100 loopte_t(i);調用函數end loop;end;/5.定义Cursordeclare/*t_emp c_nt%rowtype;*/t_emp1 number;t_emp2 number;cursor tes_t1is select * from c_nt;beginopen tes_t1;delete from c_nt1;commit;loopfetch tes_t1 into t_emp1,t_emp2;exit when tes_t1%notfound;insert into c_nt1 values(t_emp1,t_emp2);aend loop;close tes_t1;commit;end;/我们在open 一个cursor时,可能会存在一种情况,即我们不需要cursor 中所有之记录,我们该如何处理:1.在定义一个cursor时,可以附带参数如下所示declaecursor c1(p_emp_id) isselect emp_no,emp_name from dept_no where emp_id = p_emp_id; demp_pt c1%rowtype;……beginopen c1(123);loopfetch c1(123) into demp_pt…2.在将cursor中之记录项转到变量中时进行控制,如下所示:declarecursor isselect empt_no,empt_name from dept_no;p_no number;p_name number;beginloopfetch c1 into (p_no,p_name);if condition1 then……end if end;用於到cursor中變量進行控制注意:因为PL/SQL 不支持I/O,所以程序所有结果都是放在数据档中.Delete from accts where status=’bad debt’If sql%rowcount>10 thenRaise out_of_bounds;End if;另:在声明一个变量时,PL/SQL 提供两种变量类型:%TYPE,%ROWTYPE.1.%TYPE使用%TYPE 时,可以有种用法:一用法见下例:declareBalance number(7,2);Minimum_balance balance%type:=10.00;在上例中,minimum_balance 数据类型为number(7,2)具默认值为10.00. 二用法见下例(将数据类型与table 中一column datatype 相对应起来,如果table 中column datatype 变更,则在运行时,上数据类型会自动的变换上):declaremy_dname empc.empto%type;2.%rowtype使用%rowtype 数据类型用于将table 和cursor 中一数据行相对起来. 见下例:DeclareCursor my_cursor is select sal+nvl(comm,0) salcomm,wages,ename from emp;My_rec my_cursor%rowtype; Begin Open my_cursor; loopFetch my_cursor into my_rec ; Exit when my_cursor%notfound; If my_rec.wages>200 thenInsert into temp values (null,my_rec.wages,my_rec.ename); End if;End loop;Close my_cursor;End;定義一個%rowtype 類型,與my_cursor 中記錄行對應. 將my_cursor 中之記錄寫到my_rec 變量中去.变量说明在PL/SQL 中包括以下几种常见的变量类型:CHAR-存储定长的ASCII 字符串,允许存储数字,文本文符等,最长可255个字符.VARCHAR2-存储变长的字符串,尽管伋按符串的最大长度来定义,但VARCHAR2和CHAR 的区别在于如果达不到定义的长度,下的空间不会自动的填写为空格,VARCHAR2最大可以放入2000个字符.DATE-实际上是存储时间信息的日期/时间戳,在使用日期时,应考虑怎样使用日期函数.有关日期函数的格式见函数说明部分.NUMBER-存储数值数据,包括整数和浮点数、数据范围可以从110 到3810 ,而且,你有很大的数据空间. BOOLENA-存储布尔值.它表示是/否,真/假,1/0之类的东西.LONG-这是一种文本字符串,其长度大于VARCHAR2字段的2000个字符.该类最多可储存2 GB 个字符,与原始二进制数据相比,它只能存储字符信息. RAW-用来存储操作系统使用的原始二进制数据,可用于存储像图像或声音记录这样的信息,但这种数据长度最长度只有255字节.LONG RAW-与LONG 类型等价,但存储二进制数据,最长可达2GB 个字节. BINARY_INTEGER-这个字段按计算器使用的二进制格式存储信息,从 -2 到2 -1. 另:PL/SQL 提位两种复合类型:TABLE 和RECORD1.TABLE要定义一个数组,你使用表类型定义语句,例如要定义Last_name 数组,可以使用下述语句:type last_name_list is table of varchar2(22)index by binary_integer;last_name last_name_list;当定义一个长类型时,就涉及到一个删除表的问题,PL/SQL 表不能用Delete 语句来删除,但可以将每一行空值如下所示:sal_tab(3):=null;另一种法是定义两个相同类型的表类型,如果要将另一表清空,只需将空表给要清空的表即可.如下所示.declaretype numtabtype is table of numberindex by binary_integer;sal_tab numbertype;empty_tab numbertype;begin127 31 31for I in 1..100 loopsal_tab(I):=I;end loop;….End;2.RECORDDeclareType deptrectype is record(deptno number(2),dname char(14),loc char(14),);dept_rec deptrectype;beginselect deptno,dname,loc into dept_rec from dept where deptno=30; ……end;与所有的编程语言一样,定义一个变量时,同样存在变量作用范围问题: 如下所示:declarex real;function function_name(variant type)return type isdeclarex char;begin…end function_name;……beginx:=expression1……end;如果想引用另一block 之变量时,可以加上block label,如下所示:<<outer>> declarebirthdate date;begin變量x 為 real 類型. 在此範圍之內變量x 為char 變量x 為real 類型 Block label;…declarebirthdate date; begin….If birthdate=outer.birthdate then ….End if;End;End outer;引用outer block塊所定義之變量.PL/SQL控制程序流IF …THEN…ELSIF…ELSE…….END IF IF … THENSTATMENT1;elseif…then…statment2elseif…then…statment3ELSESTATMENT4;end if;例:<<outer>>for ctr in 1..20 loop…<<inner>>for ctr in 1..10 loopif outer.ctr>ctr then……end loop inner;end loop outer;2.loop…exit…end looploopsequence_of_statement;…exit;end loop;例:loopfetch c1 into …exit when c1%notfound;…end loop;close c1;另:加loop label;例:<<outer>>loop……exit outer when…end loop;…end loop outer;3.while…loop…end loop结构如下所示:例while total<=25000 loop….Select sa1 into salary from emp where…Total:=total+salary;End loop;4.for…loop…例1.select count(empno) into emp_count from emp; for L in 1..emp_count loop…end loop;例2.<<outer>>for step in 1..25 loopfor step in 1..10 loop…if outer.step>15 then…end loop;end loop outer;cursor….loopdeclaresursor c1 is select ename from emp;name varchar2(100);beginfor p_c1_rec in c1 loopname := p_c1_rec.ename;end loop;要创建存储过程,可以使用下面的SQL和PL/SQL语句:CREATE OR REPLACE PROCEDURE PROCEDURE_NAME(parameter list)AS…BEGIN…(SQL AND PL/SQL COMMANDS)END;存储函数create or replace function function_name (parameter list) return type is….Begin……end;PackagePackage分为两部分:Specific and Body在包说明部分中,主要将此包中所含的过程和Function的调用参数说明清楚,如:CREATE OR REPLACE PACKAGE ZDL_JOB_PKGASPROCEDURE ZDL_INSERT_JOB(p_bkc_id in number,p_item_id in number,p_job_number in out varchar2,p_group_id in number,p_lead_day in number,p_load_type in number,P_STATUS_TYPE IN NUMBER,P_USER_ID IN NUMBER,P_JOB_TYPE IN VARCHAR2);PROCEDURE ZDL_UPDATE_JOB(P_BKC_ID IN NUMBER,P_GROUP_ID IN NUMBER,P_STATUS_TYPE IN NUMBER,P_USER_ID IN NUMBER);FUNCTION WIP_MASS_LOAD(P_GROUP_ID IN NUMBER,P_USER_ID IN NUMBER) RETURN NUMBER;PROCEDURE ZDL_PRE_UPDATE;FUNCTION ZDL_UPDATE_ORACLE_WIP(P_USER_ID IN NUMBER) RETURN NUMBER; FUNCTION ZDL_JOB_STATUS (P_JOB_NUMBER IN VARCHAR2) RETURN NUMBER; END ZDL_JOB_PKG;在包体部分,主要将包说明部分之过程及Function之代码写出来,如:CREATE OR REPLACE PACKAGE BODY ZDL_JOB_PKGASPROCEDURE ZDL_INSERT_JOB (p_bkc_id in number, p_item_id in number,p_job_number in out varchar2,p_group_id in number,p_lead_day in number,P_LOAD_TYPE IN NUMBER,P_STATUS_TYPE IN NUMBER,P_USER_ID IN NUMBER,P_JOB_TYPE IN VARCHAR2)is…………begin…………end ZDL_INSERT_JOB;PROCEDURE ZDL_UPDATE_JOB(P_BKC_ID IN NUMBER,P_GROUP_ID IN NUMBER,P_STATUS_TYPE IN NUMBER,P_USER_ID IN NUMBER)AS…………BEGIN…………END ZDL_UPDATE_JOB;FUNCTION WIP_MASS_LOAD(P_GROUP_ID IN NUMBER,P_USER_ID IN NUMBER) RETURN NUMBERas…………begin…………END WIP_MASS_LOAD;PROCEDURE ZDL_PRE_UPDATE IS…………begin…………end ZDL_PRE_UPDATE;FUNCTION ZDL_UPDATE_ORACLE_WIP(P_USER_ID IN NUMBER) RETURN NUMBER IS…………begin…………end ZDL_UPDATE_ORACLE_WIP;FUNCTION ZDL_JOB_STATUS (P_JOB_NUMBER IN VARCHAR2) RETURN NUMBER AS…………BEGIN…………END ZDL_JOB_STATUS;END ZDL_JOB_PKG;所需系统权限要为某表创建触发器,必须能改变这个表,因此不仅要拥有表,并且要具有这个表的 alter权限,或者具有alter any table系统权限,除此之外,必须有create triger系统权限,若要在另一个用户账号(account)(也称之为模式(schema))上创建触发器,就必具有create any trigger系统权限.所需表权限触发器可以引用的表并不是初始化触发事件的表.触发器触发器有十二种类型.一个触发器的类型由执行触发器的层次位置和触发事务的类型定义.行级触发器在某个事务中,行级触发器行执行,对于上述ledger表中记例子而言,触发器.行级触发器是在create trigger命令中通过用for each row 子句创建的.合法的触发器类型当两种不同类型之触发动作相结合时,有十二种可能的配置:Before insert 行级触发器before insert 语句级触发器after insert 行级触发器after insert 语句级触发器before update 行级触发器before update 语句级触发器after update 行级触发器after update 语句级触发器before delete 行级触发器before delete 语句级触发器after delete 行级触发器after delete 语句级触发器例:CREATE OR REPLACE TRIGGER "APPS"."ZDL_BKC_JOB_BODY_AFI"AFTER INSERT ON "APPS"."ZDL_BKC_JOB_BODY"REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROWBEGINInsert into audit_tbl values(:new.id,:new……);UPDATE ZDL_BKC_JOB_HEAD SET UPDATE_DATE = SYSDATEWHERE ZDL_BKC_JOB_HEAD_ID = :NEW.ZDL_BKC_JOB_BODY_ID; END;。
plsql 使用手册
plsql 使用手册摘要:1.简介- Oracle PL/SQL简介- 为什么使用PL/SQL2.PL/SQL基础- 创建PL/SQL块- 声明变量- 数据类型- 控制结构- IF-ELSE 条件语句- CASE 选择语句- LOOP 循环语句- GOTO 跳转语句- 异常处理3.过程和函数- 创建过程和函数- 参数传递- 返回值- 过程和函数的调用4.游标- 游标的概念和类型- 打开游标- 获取数据- 关闭游标- 游标的更新和删除操作5.存储过程- 存储过程的概念和优点- 创建存储过程- 调用存储过程- 参数传递和返回值6.触发器- 触发器的概念和类型- 创建触发器- 触发器的执行时机- 触发器的应用场景7.包- 包的概念和优点- 创建包- 调用包中的过程和函数- 包的维护8.数据库交互- 连接数据库- 查询数据- 更新数据- 删除数据- 事务处理9.高级主题- 安全性和权限控制- 性能调优- 全球化支持正文:PL/SQL(Procedural Language/Structured Query Language)是一种过程式编程语言,用于Oracle 数据库管理系统。
它允许开发人员编写可重用的组件,如存储过程、触发器和包,从而简化了数据库应用程序的开发和维护。
在本使用手册中,我们将介绍PL/SQL 的基本概念和特性,以及如何使用它来创建高效、可靠的数据库应用程序。
1.简介Oracle PL/SQL是一种强大的编程语言,它允许开发人员在SQL语句中嵌入PL/SQL块,以实现更高级别的功能。
使用PL/SQL可以提高代码的重用性、模块化和安全性,降低应用程序的开发和维护成本。
1.1 为什么使用PL/SQLPL/SQL具有以下优点:- 代码可重用:PL/SQL 允许开发人员创建可重用的存储过程、触发器和包,从而减少代码量,提高开发效率。
- 模块化:PL/SQL 块可以嵌套,使代码结构更清晰,易于理解和维护。
ORACLEPLSQL编程详解全8篇
ORACLE PL/SQL编程详解第一章:PL/SQL 程序设计简介SQL语言只是访问、操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发。
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。
由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。
除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。
本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。
还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。
1.1 SQL与PL/SQL1.1.1 什么是PL/SQL?PL/SQL是Procedure Language & Structured Query Language 的缩写。
ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。
PL/SQL是对SQL语言存储过程语言的扩展。
从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。
它现在已经成为一种过程处理语言,简称PL/SQL。
目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。
可以将这两部分称为:数据库PL/SQL和工具PL/SQL。
两者的编程非常相似。
都具有编程结构、语法和逻辑机制。
工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。
本章主要介绍数据库PL/SQL内容。
oracle PLSQL 语法详细手册
SQL PL/SQL语法手册目录第一部分 SQL语法部分 ...................................................................................................... 错误!未定义书签。
一、CREATE TABLE语句 .................................................................................. 错误!未定义书签。
二、CREATE SEQUENCE语句 .............................................................................. 错误!未定义书签。
三、CREATE VIEW语句...................................................................................... 错误!未定义书签。
四、INSERT语句:.............................................................................................. 错误!未定义书签。
五、UPDATE语句:.............................................................................................. 错误!未定义书签。
六、DELETE语句:.............................................................................................. 错误!未定义书签。
PL-SQL Oracle教程
目录第二章基本的SQL SELECT语句 (1)第三章限制行和对数据排序 (2)第四章联接多个表 (3)迪卡尔连接 (3)相等连接 (3)不等连接 (3)自我连接 (4)外部连接 (4)集合运算符 (4)第五章单行函数 (5)大小写转换函数 (5)字符串处理函数 (5)数字函数 (6)Date函数 (6)其它函数 (7)NESTRING函数 (9)DUAL表 (9)第六章组函数 (10)第七章子查询 (11)单行子查询 (11)多行子查询 (11)多列子查询 (12)NULL值 (13)嵌套的子查询 (13)第八章表的创建和维护 (15)表设计 (15)创建表 (16)修改现有的表 (17)删除表 (19)第九章约束 (20)创建约束 (20)使用Primary Key约束 (20)使用Foreign Key约束 (21)使用Unique约束 (21)使用Check约束 (21)使用Not NULL约束 (22)在创建表的过程中包括约束 (22)查看约束 (22)禁用约束 (23)删除约束 (23)第十章数据操作 (24)插入新行 (24)修改现有的行 (25)替换变量 (25)事务控制语句 (25)删除行 (25)表锁 (26)第十一章视图 (27)创建视图 (27)创建复杂视图 (27)删除视图 (28)创建内联视图 (28)第十五章PL/SQL简介 (29)基本结构 (30)声明部分 (30)可执行部分 (31)执行控制 (31)循环语句 (32)第十六章游标和异常 (34)游标 (34)异常处理 (36)PL/SQL——第二章基本的SQL SELECT语句 1 第二章基本的SQL SELECT语句PL/SQL——第三章限制行和对数据排序 2 第三章限制行和对数据排序第四章联接多个表A表BP◆迪卡尔连接(A表每个记录与B表每个纪录配对。
A*B)1.select A_ID , B_IDfrom A , B2.select A_ID , B_IDfrom A cross join B◆相等连接(A表中某列与B表中某列相等)1.select A . A_name , B . B_namefrom A , Bwhere A . A_ID = B . B_ID2.select A . A_name , B . B_namefrom A join Bon A . A_ID = B . B_ID如果A表与B表关联的列名相等,则可以用Natural Join(此时不能使用修饰符)select A_name , B_namefrom A Natural Join B或:select A_name , B_namefrom A Join Busing(ID)◆不等连接(不存在可以关联的相同行,即一定范围内的连接)1.select A_name , P_namefrom A , Pwhere A_Pricebetween Min and Max2.select A_name , P_namefrom A join Pon A_Price between Min and Max◆自我连接(同一张表内的自身连接)1.select r . B_ID , c . C_IDfrom B r, B cwhere r . B_ID =c . C_ID2.select r . B_ID , c . C_IDfrom B r join B con r . B_ID =c . C_ID◆外部连接(连接查询的结果中包括存在与一个表中但是另一个表中没有相应行的纪录)1.select A . A_name , B . B_name 左外连接from A , Bwhere A . A_ID = B . B_ID(+)2.select A . A_name , B . B_name 左外连接from A left(left/right/all)outer join Bon A . A_ID = B . B_ID◆集合运算符()Select* from A_nameUnion(Union / Union all / Intersect / Minus)Select* from B_nameUnion:返回结合的select语句的结果,删除重复的纪录。
PLSQL(Oracle)编程规范
PL/PL/SQL SQL 编程编程规范规范规范1目的........................................................................................................................................... 2 2 应用范围 ................................................................................................................................... 2 3 PL/SQL 变量规范 ...................................................................................................................... 2 4书写规范 ................................................................................................................................... 3 4.1 大小写风格 ................................................................................................................... 3 4.2 缩进风格 ....................................................................................................................... 3 4.3 空格及换行 ................................................................................................................... 6 4.4 创建过程/函数/包 ....................................................................................................... 8 5 注释规范 ................................................................................................................................... 9 6常用语法 ................................................................................................................................. 12 6.1 变量声明 ..................................................................................................................... 12 6.2 返回值 ......................................................................................................................... 12 6.3 符号 ............................................................................................................................. 13 6.4 包的使用 ..................................................................................................................... 13 6.5 绑定变量 ..................................................................................................................... 13 6.6 异常处理 ..................................................................................................................... 14 6.7 事务控制 ..................................................................................................................... 15 6.8 游标使用 ..................................................................................................................... 15 7注意事项 ................................................................................................................................. 17 7.1 避免通过DUAL 表赋值。
plsql 使用手册
plsql 使用手册PL/SQL 使用手册PL/SQL 是一种过程化编程语言,特别适合与 Oracle 数据库一起使用。
本文将为您提供 PL/SQL 的使用手册,详细介绍 PL/SQL 的特性、语法以及常用技巧,帮助您快速上手并有效地利用 PL/SQL 进行数据库开发。
1. PL/SQL 简介PL/SQL 是 Oracle 数据库中扩展功能的一部分,它结合了 SQL 语句和流程控制语句,允许开发人员在数据库中执行复杂的任务和操作。
PL/SQL 以块的方式组织代码,这些代码块可以嵌套和重用,提高了代码的可维护性和复用性。
2. PL/SQL 基础语法2.1 变量和数据类型在 PL/SQL 中,可以声明各种类型的变量来存储数据。
常见的数据类型包括整型、浮点型、字符型等。
通过变量,可以存储和操作数据,使得代码更加灵活和可读性更强。
2.2 控制流程PL/SQL 提供了丰富的控制流程语句,如条件判断、循环等,用于实现不同的业务逻辑。
通过控制流程语句,可以根据不同的情况执行不同的代码块,实现灵活的程序逻辑。
2.3 异常处理PL/SQL 具有强大的异常处理机制,通过使用 EXCEPTION 关键字来捕获和处理异常。
可以使用 TRY-CATCH 结构捕获异常,并在异常发生时执行相应的操作,保证程序的健壮性和稳定性。
3. PL/SQL 常用技巧3.1 存储过程存储过程是 PL/SQL 的一种重要应用,可以将一系列的 SQL 语句和逻辑封装在一个过程中,提供数据库操作的接口。
存储过程可以提高性能,减少网络开销,并增加代码的重用性。
3.2 游标游标是 PL/SQL 用于遍历结果集的一种对象。
通过游标,可以从查询结果中提取出数据,并逐条进行处理。
这在需要对查询结果进行逐行处理时非常有用。
3.3 包和触发器PL/SQL 支持包和触发器的概念,这些是组织和管理代码的有力工具。
通过将相关的过程和函数组织到包中,可以提高代码的可维护性和可读性。
Oracle PL SQL 编程手册
Oracle PL/SQL 编程手册(SQL大全) 一、SQL PLUS1引言SQL命令以下17个是作为语句开头的关键字:alter drop revokeaudit grant rollback*commit*insert selectcomment lock updatecreate noaudit validatedelete rename这些命令必须以“;”结尾带*命令句尾不必加分号,并且不存入SQL缓存区。
SQL中没有的SQL*PLUS命令这些命令不存入SQL缓存区@define pause#del quit$describe remark/disconnect runaccept document saveappend edit setbreak exit showbtitle get spoolchange help sqlplusclear host startcolumn input timingcompute list ttitleconnect newpage undefinecopy---------2数据库查询数据字典TAB用户创建的所有基表、视图和同义词清单DTAB构成数据字典的所有表COL用户创建的基表的所有列定义的清单CATALOG用户可存取的所有基表清单select*from tab;describe命令描述基表的结构信息describe deptselect*from emp;select empno,ename,jobfrom emp;select*from deptorder by deptno desc;逻辑运算符=!=或<>>>=<<=inbetween value1and value2like%_in nullnotno in,is not null谓词in和not in有哪些职员和分析员select ename,jobfrom empwhere job in('clerk','analyst');select ename,jobfrom empwhere job not in('clerk','analyst');谓词between和not between哪些雇员的工资在2000和3000之间select ename,job,sal from empwhere sal between2000and3000;select ename,job,sal from empwhere sal not between2000and3000;谓词like,not likeselect ename,deptno from empwhere ename like'S%';(以字母S开头)select ename,deptno from empwhere ename like'%K';(以K结尾)select ename,deptno from emp where ename like'W___';(以W开头,后面仅有三个字母)select ename,job from emp where job not like'sales%'; (哪些雇员的工种名不以sales开头)谓词is null,is not null没有奖金的雇员(即commision为null)select ename,job from emp where comm is null;select ename,job from emp where comm is not null;多条件查询select ename,jobfrom empwhere deptno=20and job!='clerk';表达式+-*/算术表达式选择奖金高于其工资的5%的雇员select ename,sal,comm,comm/sal from empwhere comm>.05*salorder by comm/sal desc;日期型数据的运算add two days to6-Mar-876-Mar-87+2=8-Mar-87add two hours to6-Mar-876-Mar-87+2/24=6-Mar-87and2hrsadd15seconds to6-Mar-876-Mar-87+15/(24*60*60)=6-Mar-87and15 secs列名的别名select ename employee from empwhere deptno=10;(别名:employee)select ename,sal,comm,comm/sal"C/S RATIO" from empwhere comm>.05*salorder by comm/sal desc;SQL命令的编辑list or l显示缓冲区的内容list4显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。
PLSQL基本操作手册
PL/SQL基本操作手册PL/SQL(Procedural Language/Structured Query Language)是一种基于SQL 语言的过程编程语言,它在Oracle数据库中非常常见。
本文将介绍PL/SQL的基本操作,如变量、控制语句、游标等。
变量和常量变量可以使用DECLARE语句声明。
在代码中,变量必须指定它们的类型,例如NUMBER、VARCHAR2或BOOLEAN。
DECLAREv_employee_id NUMBER:=100;v_employee_name VARCHAR2(50) :='John Doe';v_is_hired BOOLEAN:=TRUE;BEGIN-- code goes hereEND;常量是一个不可变的参数,可以使用CONSTANT关键字定义。
常量的值不会在程序中更改。
DECLAREc_tax_rate CONSTANT NUMBER(4, 2) :=0.08;BEGIN-- code goes hereEND;控制语句控制语句提供了决策和循环结构。
IF语句IF语句用于对一个表达式进行测试,以确定哪个分支应该执行。
IF expression THEN-- code goes hereELSIF expression THEN-- code goes hereELSE-- code goes hereEND IF;CASE语句CASE语句用于检查多个可能的条件。
CASE expressionWHEN value1 THEN-- code goes hereWHEN value2 THEN-- code goes hereELSE-- code goes hereEND CASE;LOOP语句LOOP语句用于无限的循环,可以通过某些条件来终止循环。
LOOP-- code goes hereEXIT WHEN expression;END LOOP;WHILE语句WHILE语句用于执行一系列语句,只要指定条件为TRUE。
PL_SQL完全教程
PL_SQL完全教程
**PL/SQL(Procedural Language/SQL)**
PL/SQL是一种由Oracle研发的基于SQL语法的程序开发语言,是
SQL的一种功能扩展,它在SQL基础上增加了程序控制的能力,进而可以
将多条 SQL 语句组合成一个完整的操作逻辑,它可以让你构建和发布可
以更好地进行访问和操作数据库的应用程序。
1.PL/SQL的特点
a.可重复使用性:PL/SQL可以将一批逻辑语句组织成一个整体,被
称为一个功能块,而在每次程序执行时都可以执行相同的一段程序,因此,只需一次编写,多次重复使用,大大提高了编程的效率。
b.可扩展性:PL/SQL支持使用PL/SQL模块包,可以扩展和重用。
模
块包可以将PL/SQL功能分组,并以专有系统模块或用户定义的模块的形
式提供给其他程序。
c.数据安全性:PL/SQL提供了一系列的安全措施来保护数据,如访
问控制、权限控制、审计等,以防止恶意的更改数据库数据。
2.PL/SQL语法
PL/SQL语法分为两个部分:声明式语法和执行式语法。
a.声明式语法
声明式语法用来描述变量、常量、存储过程和函数,它们有时也被称
为“声明块”或“声明语句”。
声明式语法的格式如下:
declare
变量类型变量名;
begin
语句;
end;
b.执行式语法
执行式语法会被特定的程序编译器执行。
经典Oracle数据库培训-PLSQL编程
if condition1 then Statements_1 elsif condition2
then Statements_2 else Statements_3 end if 该表达式的功能为:如果if后的条件成立,执行then后面的语句,否则判断 elseif后面的条件,条件成立执行第二个then后面的语句,否则执行else后的语 句。这是条件语句嵌套。 IF 可以嵌套,可以在IF 或IF ..ELSE语句中使用IF或IF…ELSE语句。
执行部分包含了所有的语句和表达式,执行部分以关键字BEGIN开 始,以关键字EXCEPTION结束,如果EXCEPTION不存在,那么将以 关键字END结束。分号分隔每一条语句,使用赋值操作符:=或SELECT INTO或FETCH INTO给每个变量赋值,执行部分的错误将在异常处理 部分解决,在执行部分中可以使用另一个PL/SQL程序块,这种程序块 被称为嵌套块。
1、条件结构
1) If条件判断逻辑结构 If条件判断逻辑结构有三种表达方式。 ①表达式一:
if condition then Statement end if 该表达式的功能为:若条件为真,执行then后的语句;否则,跳出条件语句 执行end if后的语句。 ②表达式二:
if condition then Statements_1 else Statements_2 end if 该表达式的功能为:如果条件为真执行then后的语句,否则执行else后的语句。 ③表达式三:
为了减少这部分程序的修改,编程时使用%TYPE、 %ROWTYPE方式声明变量,使变量声明的类型与表中的保 持同步,随表的变化而变化,这样的程序在一定程度上具有 更强的通用性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle PL/SQL 编程手册(SQL大全)一、SQL PLUS1 引言SQL命令以下17个是作为语句开头的关键字:alter drop revokeaudit grant rollback*commit* insert selectcomment lock updatecreate noaudit validatedelete rename这些命令必须以“;”结尾带*命令句尾不必加分号,并且不存入SQL缓存区。
SQL中没有的SQL*PLUS命令这些命令不存入SQL缓存区@ define pause# del quit$ describe remark/ disconnect runaccept document saveappend edi t setbreak exit showbtitle get spoolchange help sqlplusclear host startcolumn input timingcompute list ttitleconnect newpage undefinecopy---------2 数据库查询数据字典TAB 用户创建的所有基表、视图和同义词清单 DTAB 构成数据字典的所有表COL 用户创建的基表的所有列定义的清单 CATALOG 用户可存取的所有基表清单select * from tab;describe命令 描述基表的结构信息describe deptselect *from emp;select empno,ename,jobfrom emp;select * from deptorder by deptno desc; 逻辑运算符= !=或<> > >= < <= inbetween value1 and value2like%_in nullnotno in,is not null谓词in和not in有哪些职员和分析员select ename,jobfrom empwhere job in ('clerk','analyst');select ename,jobfrom empwhere job not in ('clerk','analyst');谓词between和not between哪些雇员的工资在2000和3000之间select ename,job,sal from empwhere sal between 2000 and 3000; select ename,job,sal from empwhere sal not between 2000 and 3000; 谓词like,not likeselect ename,deptno from empwhere ename like 'S%';(以字母S开头)select ename,deptno from empwhere ename like '%K';(以K结尾)select e name,deptno from empwhere ename like 'W___';(以W开头,后面仅有三个字母)select ename,job from empwhere job not like 'sales%';(哪些雇员的工种名不以sales开头)谓词is null,is not null没有奖金的雇员(即commision为null)select ename,job from empwhere comm is null;select ename,j ob from empwhere comm is not null;多条件查询select ename,jobfrom empwhere deptno=20and job!='clerk';表达式+ - * /算术表达式选择奖金高于其工资的5%的雇员select ename,sal,comm,comm/sal from emp where comm>.05*salorder by comm/sal desc;日期型数据的运算add two days to 6-Mar-876-Mar-87 + 2 = 8-Mar-87add two hours to 6-Mar-876-Mar-87 + 2/24 = 6-Mar-87 and 2hrsadd 15 seconds to 6-Mar-876-Mar-87 + 15/(24*60*60) = 6-Mar-87 and 1 5 secs列名的别名select ename employee from empwhere deptno=10;(别名:employee)select ename,sal,comm,comm/sal "C/S RATIO" fr om empwhere comm>.05*salorder by comm/sal desc;SQL命令的编辑list or l 显示缓冲区的内容list 4 显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。
change or c 用新的内容替换原来在一行中第一次出现内容SQL>c/(...)/('analyst')/input or i 增加一行或多行append or a 在一行后追加内容del 删除当前行 删除SQL缓冲区中的当前行run 显示并运行SQL缓冲区中的命令/ 运行SQL缓冲区中的命令edit 把SQL缓冲区中的命令写到操作系统下的文本文件, 并调用操作系统提供的编辑器执行修改。
-------------3 数据操纵数据的插入insert into deptvalues (10,'accounting','new york');insert into dept (dname,dep tno)values ('accounting',10);从其它表中选择插入数据insert into emp (empno,ename,deptno)select id,name,departmentfrom old_empwhere department in(10,20,30,40);使用参数insert into deptvalues(&deptno,&dname,&loc);执行时,SQL/PLUS对每个参数将有提示用户输入 参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号insert into deptvalues(&deptno,'&dname','&loc');插入空值(NULL)insert into deptvalues(50,'education',null);插入日期型数据日期型数据缺省格式:DD-MON-YYinsert into emp(empno,ename,hiredate)values(7963,'stone','07-APR-87');系统时间:SYSDATEinsert into emp(empno,ename,hiredate)values(7600,'kohn',SYSDATE);数据更新update empset job='manager'where ename='martin';update empset job='market rep'where ename='salesman';update empset deptno=40,job='market rep'where job='salesman';数据删除delete empwhere empno=765;更新的提交commit自动提交方式set autocommit on如果状态设为开,则使用inesrt,update,delete会立即提交。
更新取消rollback两次连续成功的commit之间的操作,称为一个事务---------------4 创建基表、视图创建基表create table dept(deptno number(2),dname char(14),loc char(13));数据字典会自动更新。
一个基表最多254列。
表名列名命名规则:限制第一个字符必须是字母,后面可任意(包括 $ # _ 但不能是逗号)。
名字不得超过30个字符。
唯一某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。
使用双引号如果表名用双引号括起来,则可不满足上述规则;只有使用双引号,才能区别大、小写;命名时使用了双引号,在以后的操作也必须使用双引号。
数据类型:char(n) (不得超过240字符)number(n,d)datelong (最多65536字符)raw (二进制原始数据)空值处理有时要求列值不能为空create table dept(deptno number(2) not null,dname char(14),loc char(13));在基表中增加一列alter table deptadd (headcnt number(3));修改已有列属性alter table deptmodify dname char(20);注:只有当某列所有值都为空时,才能减小其列值宽度。
只有当某列所有值都为空时,才能改变其列值类型。
只有当某列所有值都为不空时,才能定义该列为not null。
例:alter table dept modify (loc char(12));alter t able dept modify loc char(12);alter table dept modify (dname char(13),loc ch ar(12));创建视图create view managers asselect ename,job,salfrom empwhere job='manager';为视图列名取别名create view mydept(person,title,salary)as select ename,job,salfrom empwhere deptno=10;with check option选项使用with check option,保证当对视图插入或更新数据时,该数据必须满足视图定义中select命令所指定的条件。