您的当前位置:首页正文

PL/SQL编程基础

2023-11-09 来源:画鸵萌宠网

-- 定义部分BEGIN-- 执行部分EXCEPTION-- 异常处理部分END;-- 块结束标记

 

2.PL/SQL特征:

                    (1).有利于客户、服务器环境应用运行

                    (2).适合于客户环境

                    (3).模块化

(4).过程化

(5).提供大量内置程序包

(6).运行错误的可处理性

3.PL/SQL块的类型:匿名块、子程序、触发器

   匿名块:指没有名称的PL/SQL块。可内嵌到应用程序(例如Java)中,也可以在交互环境(例如SQL*Plus)中直接使用。

   子程序:包括存储过程(用于执行特定操作)、函数(用于返回特定数据)、包(用于逻辑组合相关的过程和函数)。

   触发器:指隐含执行的存储过程。

4.数据类型与变量

   例如:

-- 创建表create table DEPT -- 部门( id NUMBER(4) not null constraint PK_DEPT_ID primary key, name VARCHAR2(20));create table EMPLOYEE -- 员工( id NUMBER(4) not null constraint PK_EMP_ID primary key, name VARCHAR2(20) not null, birthday DATE, address VARCHAR2(100), did NUMBER(4), constraint FK_EMP_DEPT foreign key (DID) references DEPT (ID));-- 添加测试数据INSERT INTO DEPT VALUES(1, ‘财务部‘);INSERT INTO DEPT VALUES(2, ‘市场部‘);INSERT INTO DEPT VALUES(3, ‘综合部‘);INSERT INTO DEPT VALUES(4, ‘研发部‘);INSERT INTO DEPT VALUES(5, ‘网络部‘);INSERT INTO EMPLOYEE VALUES(1, ‘李飞‘, TO_DATE(‘1975.07.03‘,‘yyyy.mm.dd‘), ‘四川成都‘, 1);INSERT INTO EMPLOYEE VALUES(2, ‘刘兰‘, TO_DATE(‘1985.09.03‘,‘yyyy.mm.dd‘), ‘四川成都‘, 1);INSERT INTO EMPLOYEE VALUES(3, ‘张强‘, TO_DATE(‘1987.11.22‘,‘yyyy.mm.dd‘), ‘广东广州‘, 2);INSERT INTO EMPLOYEE VALUES(4, ‘刘武龙‘, TO_DATE(‘1979.07.18‘,‘yyyy.mm.dd‘), ‘陕西西安‘, 2);INSERT INTO EMPLOYEE VALUES(5, ‘向小梅‘, TO_DATE(‘1982.03.03‘,‘yyyy.mm.dd‘), ‘四川成都‘, 2);INSERT INTO EMPLOYEE VALUES(6, ‘周斌‘, TO_DATE(‘1985.11.08‘,‘yyyy.mm.dd‘), ‘四川成都‘, 4);INSERT INTO EMPLOYEE VALUES(7, ‘王强‘, TO_DATE(‘1985.01.25‘,‘yyyy.mm.dd‘), ‘四川成都‘, 4);

 

-- 定义变量DECLARE cnt NUMBER(4) := 5;BEGIN DBMS_OUTPUT.PUT_LINE(‘数字:‘ || CNT);END;-- %TYPEDECLARE emp_name employee.name%TYPE; -- emp_name类型与employee表中name列的类型一致BEGIN SELECT name INTO emp_name FROM employee WHERE id=&emp_id; -- &emp_id 从键盘接收输入 DBMS_OUTPUT.PUT_LINE(‘姓名:‘ || emp_name);END;-- %ROWTYPEDECLARE rec employee%ROWTYPE;BEGIN SELECT * INTO rec FROM employee WHERE id=1; DBMS_OUTPUT.PUT_LINE(‘姓名:‘ || rec.name || ‘, 生日:‘ || rec.birthday || ‘,地址:‘ || rec.address);END;-- 定义 RECORDDECLARE TYPE emp_type IS RECORD( ename employee.name%TYPE NOT NULL := ‘匿名‘, ebirth employee.birthday%TYPE, eaddr employee.address%TYPE ); emp emp_type;BEGIN SELECT name,birthday,address INTO emp FROM employee WHERE id=4; DBMS_OUTPUT.PUT_LINE(‘姓名:‘ || emp.ename || ‘, 生日:‘ || emp.ebirth || ‘,地址:‘ || emp.eaddr);END;-- 定义索引表DECLARE TYPE emp_name_type IS TABLE OF employee.name%TYPE -- INDEX BY BINARY_INTEGER; INDEX BY VARCHAR2(20); emp_names emp_name_type;BEGIN emp_names(‘lily‘) := ‘Lily‘; emp_names(‘lucy‘) := ‘Lucy‘; emp_names(‘tom‘) := ‘Tommy‘; -- SELECT name INTO emp_names(‘abc‘) FROM employee WHERE id=1; DBMS_OUTPUT.PUT_LINE(‘姓名:‘ || emp_names(‘lily‘) || ‘,‘ || emp_names(‘lucy‘) || ‘,‘ || emp_names(‘tom‘));END;-- 定义VARRAYDECLARE TYPE array_type IS VARRAY(5) OF VARCHAR2(20); arr array_type;BEGIN -- 为各元素赋初值 arr := array_type(‘a‘,‘b‘,NULL,‘c‘, ‘d‘); DBMS_OUTPUT.PUT_LINE(‘第一个:‘ || arr(1)); DBMS_OUTPUT.PUT_LINE(‘第三个:‘ || arr(3)); arr(3) := ‘张三‘; DBMS_OUTPUT.PUT_LINE(‘修改后第三个:‘ || arr(3));END;     

PL/SQL编程基础

标签:

小编还为您整理了以下内容,可能对您也有帮助:

pl/sql是什么

PL/SQL(Proceral Language/Structured Query Language)是一种过程化的编程语言,特别用于Oracle数据库管理系统。

PL/SQL是Oracle数据库的内置语言,它结合了SQL语句和程序控制语句,可以用于编写存储过程、触发器、函数和包等数据库对象。

PL/SQL具有以下特点和功能:

过程化编程:PL/SQL支持过程化编程风格,允许开发人员编写具有顺序结构、条件语句、循环语句等的程序代码。这样可以实现复杂的业务逻辑和数据处理操作。

强大的数据处理能力:PL/SQL通过集成SQL语句,可以方便地进行数据库操作,如查询数据、插入、更新和删除记录等。同时,PL/SQL还提供了丰富的数据处理功能,如变量声明、数据类型定义、游标操作等,使开发人员能够灵活地处理和操作数据。

错误处理和异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时的错误和异常情况。开发人员可以编写异常处理代码,定义处理异常的逻辑,从而保证程序的稳定性和可靠性。

可复用性和模块化:PL/SQL支持封装代码为存储过程、函数和包等可复用的模块。通过将相关的代码封装到模块中,可以提高代码的可维护性和重用性,减少代码冗余。

与数据库紧密集成:PL/SQL与Oracle数据库紧密集成,可以直接访问数据库对象和数据,执行事务管理和数据操作。PL/SQL可以在数据库服务器端执行,提高了性能和效率。

总之,PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数和包等数据库对象,具有强大的数据处理能力和丰富的程序控制语法,是开发和管理Oracle数据库的重要工具。

PL/SQL的基本概念

是Oracle对标准数据库语言SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将SQL的数据操纵功能与过程化语言数据处理功能结合起来.PL/SQL的使用,使SQL成为一种高级程序设计语言,支持高级语言的块操作,条件判断,循环语句,嵌套等,与数据库核心的数据类型集成,使SQL 的程序设计效率更高.

⒈1 PL/SQL的作用

使用PL/SQL可以编写具有很多高级功能的程序,虽然通过多个SQL语句可能也能实现同样的功能,但是相比而言,PL/SQL具有更为明显的一些优点:

⒈能够使一组SQL语句的功能更具模块化程序特点;

⒉采用了过程性语言控制程序的结构;

⒊可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断;

⒋具有较好的可移植性,可以移植到另一个Oracle数据库中;

⒌集成在数据库中,调用更快;

⒍减少了网络的交互,有助于提高程序性能。

通过多条SQL语句实现功能时,每条语句都需要在客户端和服务端传递,而且每条语句的执行结果也需要在网络中进行交互,占用了大量的网络带宽,消耗了大量网络传递的时间,而在网络中传输的那些结果,往往都是中间结果,而不是我们所关心的。

而使用PL/SQL程序是因为程序代码存储在数据库中,程序的分析和执行完全在数据库内部进行,用户所需要做的就是在客户端发出调用PL/SQL的执行命令,数据库接收到执行命令后,在数据库内部完成整个PL/SQL程序的执行,并将最终的执行结果反馈给用户。在整个过程中网络里只传输了很少的数据,减少了网络传输占用的时间,所以整体程序的执行性能会有明显的提高。

⒈2 PL/SQL程序的基本结构

PL/SQL块由四个基本部分组成:声明、执行体开始、异常处理、执行体结束。

下面是四个部分的基本结构:

DECLARE —— 可选部分

变量、常量、游标、用户定义异常的声明

……

BEGIN —— 必要部分

SQL语句和PL/SQL语句构成的执行程序

……

EXCEPTION —— 可选部分

程序出现异常时,捕捉异常并处理异常

……

END;—— 必须部分

在数据库执行PL/SQL程序时,PL/SQL语句和SQL语句是分别进行解析和执行的。PL/SQL块被数据库内部的PL/SQL引擎提取,将SQL语句取出送给Oracle的SQL引擎处理,两种语句分别在两种引擎中分析处理,在数据库内部完成数据交互、处理过程。

PL/SQL的基本语法

begin

? dbms_output.put_line(‘hello,world‘);

end;

???

但是在sqlplus里面就不一样了

首先输入

begin

dbms_output.put_line(‘hello,world‘);

end;

/

通过set serveroutput on

/

来调用输出语句

技术分享

?

可以通过edit命令对过程语句进行修改

?

name [constrant]datatype[notnull]:=|default value

?

?

--pl/sql语句中的if语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? end if;

end;

?

--pl/sql 里面的 if else 语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? else

? ? ? dbms_output.put_line(‘more 2000‘);

? ? end if;

end;

?

--pl/sql语句中的if elsif语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? ? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? elsif (sal1>2000 and sal1<400) then

? ? dbms_output.put_line(‘between 2000 and 4000‘);

? ? elsif (sal1>400) then

? ? dbms_output.put_line(‘more 4000‘);

? ? else

? ? ? dbms_output.put_line(‘other...........‘);

? ? end if;

end;

?

--pl/sql语句里面的case语句

declare

? ? a number(2):=0;

begin

? ? a:=&a;

? ? case a

? ? ? when 10 then

? ? ? ? dbms_output.put_line(‘aaaaaaaaaaa‘);

? ? ? when 20 then

? ? ? ? dbms_output.put_line(‘bbbbbbbbbbbb‘);

? ? ? else

? ? ? ? dbms_output.put_line(‘other.....‘);

? ? end case; ? ?

end;

?

--pl/sql语句里面的loop语句

declare

? ? q number :=0;

begin

? ? loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ? exit when q=10;

? ? end loop;

end;

?

--使用if 结束的

declare

? ? q number :=0;

begin

? ? loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ? if q=10 then

? ? ? ? exit;

? ? ? end if;

? ? end loop;

end;

?

?

--使用 while 循环

declare

? ? ?q number :=0;

begin

? ? ?while(q<10)loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ?end loop;

end;

?

--使用 for循环 ?反向遍历 reverse

declare

begin

? ? ?for i in reverse 1..10 loop

? ? ? dbms_output.put_line(i); ?

? ? ?end loop;

end;

?

?

PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。

?

?

record ?定义类型

?

集合容器

index_by table

嵌套表

varray

type num_array is table of number(5) index by binary_integer;

?

?

单行单列 ?变量 varchar2 %type

单行多列 record

单列多行 集合 (type)

多行多列 集合(rowtype)

?

索引表的格式

type name is table of element_type index by key_type;

?

declare

? ? ?v_ename emp.ename%type;

? ? ?v_emp emp%rowtype;

begin

? ? ?select ename into v_ename from emp where empno=7369;

? ? ?select * into v_emp from emp where empno=7369;

? ? ?dbms_output.put_line(v_ename);

? ? ?dbms_output.put_line(v_emp.sal||‘ ?‘||v_emp.ename);

end;

?

--仅输出特殊的结构 ? 使用 record来定义

declare

? ??type emp_record is record(

? ? ? ? ?v_ename emp.ename%type,

? ? ? ? ?v_sal emp.sal%type,

? ? ? ? ?v_deptno emp.deptno%type

? ? );

? ? v_emp_record emp_record;

begin

? ? select ename,sal,deptno into v_emp_record from emp where empno=7369;

? ? --我也可以通过赋值语句修改里面的值

? ? v_emp_record.v_ename:=‘zhaan‘;

? ? dbms_output.put_line(v_emp_record.v_ename);

? ? dbms_output.put_line(v_emp_record.v_sal);

? ? dbms_output.put_line(v_emp_record.v_deptno);

end;

?

--

declare

? ? type num_array is table of number(5) index by binary_integer;

? ? a num_array;

begin

? ? for i in 1..10 loop

? ? ? a(i):=i;

? ? end loop;

? ? for i in 1..10 loop

? ? ? dbms_output.put_line(a(i));

? ? end loop;

end;

?

?

--例子一

declare

? ? type emp_array is table of emp%rowtype index by binary_integer;

? ? a emp_array;

begin

? ? select * bulk collect into a from emp;

? ? for i in a.first..a.last loop

? ? ? dbms_output.put_line(a(i).ename||‘ ?‘||a(i).job);

? ? end loop;

end;

--集合中装有集合

declare

? ? type record1 is record(

? ? ? ? ?vempno emp.empno%type,

? ? ? ? ?vename emp.ename%type,

? ? ? ? ?vsal ? emp.sal%type

? ? );

? ? type record2 is record(

? ? ? ? ?vdeptno emp.deptno%type,

? ? ? ? ?vrecord record1

? ? );

? ? a record1;

? ? b record2;

begin

? select empno,ename,sal into a from emp where empno=7369;

? b.vrecord:=a;

? dbms_output.put_line(b.vrecord.vempno);

? dbms_output.put_line(b.vrecord.vename);

? dbms_output.put_line(b.vrecord.vsal);

end;

--

declare

? ? type cc is table of varchar2(20) index by varchar2(20);

? ? a cc;

begin

? ? a(‘beijing‘):=‘china‘;

? ? a(‘dongjing‘):=‘japan‘;

? ? a(‘huashengdun‘):=‘usa‘;

? ? dbms_output.put_line(a(‘beijing‘));

end;

学习pl/sql之一

标签:

PL/SQL的基本语法

begin

? dbms_output.put_line(‘hello,world‘);

end;

???

但是在sqlplus里面就不一样了

首先输入

begin

dbms_output.put_line(‘hello,world‘);

end;

/

通过set serveroutput on

/

来调用输出语句

技术分享

?

可以通过edit命令对过程语句进行修改

?

name [constrant]datatype[notnull]:=|default value

?

?

--pl/sql语句中的if语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? end if;

end;

?

--pl/sql 里面的 if else 语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? else

? ? ? dbms_output.put_line(‘more 2000‘);

? ? end if;

end;

?

--pl/sql语句中的if elsif语句

declare

? ? ?sal1 number(6,2);

begin

? select sal into sal1 from emp where lower(ename)=lower(‘&ename‘);

? ? if (sal1<2000) then

? ? dbms_output.put_line(‘less 2000‘);

? ? elsif (sal1>2000 and sal1<400) then

? ? dbms_output.put_line(‘between 2000 and 4000‘);

? ? elsif (sal1>400) then

? ? dbms_output.put_line(‘more 4000‘);

? ? else

? ? ? dbms_output.put_line(‘other...........‘);

? ? end if;

end;

?

--pl/sql语句里面的case语句

declare

? ? a number(2):=0;

begin

? ? a:=&a;

? ? case a

? ? ? when 10 then

? ? ? ? dbms_output.put_line(‘aaaaaaaaaaa‘);

? ? ? when 20 then

? ? ? ? dbms_output.put_line(‘bbbbbbbbbbbb‘);

? ? ? else

? ? ? ? dbms_output.put_line(‘other.....‘);

? ? end case; ? ?

end;

?

--pl/sql语句里面的loop语句

declare

? ? q number :=0;

begin

? ? loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ? exit when q=10;

? ? end loop;

end;

?

--使用if 结束的

declare

? ? q number :=0;

begin

? ? loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ? if q=10 then

? ? ? ? exit;

? ? ? end if;

? ? end loop;

end;

?

?

--使用 while 循环

declare

? ? ?q number :=0;

begin

? ? ?while(q<10)loop

? ? ? q:=q+1;

? ? ? dbms_output.put_line(‘q=‘||q);

? ? ?end loop;

end;

?

--使用 for循环 ?反向遍历 reverse

declare

begin

? ? ?for i in reverse 1..10 loop

? ? ? dbms_output.put_line(i); ?

? ? ?end loop;

end;

?

?

PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。

?

?

record ?定义类型

?

集合容器

index_by table

嵌套表

varray

type num_array is table of number(5) index by binary_integer;

?

?

单行单列 ?变量 varchar2 %type

单行多列 record

单列多行 集合 (type)

多行多列 集合(rowtype)

?

索引表的格式

type name is table of element_type index by key_type;

?

declare

? ? ?v_ename emp.ename%type;

? ? ?v_emp emp%rowtype;

begin

? ? ?select ename into v_ename from emp where empno=7369;

? ? ?select * into v_emp from emp where empno=7369;

? ? ?dbms_output.put_line(v_ename);

? ? ?dbms_output.put_line(v_emp.sal||‘ ?‘||v_emp.ename);

end;

?

--仅输出特殊的结构 ? 使用 record来定义

declare

? ??type emp_record is record(

? ? ? ? ?v_ename emp.ename%type,

? ? ? ? ?v_sal emp.sal%type,

? ? ? ? ?v_deptno emp.deptno%type

? ? );

? ? v_emp_record emp_record;

begin

? ? select ename,sal,deptno into v_emp_record from emp where empno=7369;

? ? --我也可以通过赋值语句修改里面的值

? ? v_emp_record.v_ename:=‘zhaan‘;

? ? dbms_output.put_line(v_emp_record.v_ename);

? ? dbms_output.put_line(v_emp_record.v_sal);

? ? dbms_output.put_line(v_emp_record.v_deptno);

end;

?

--

declare

? ? type num_array is table of number(5) index by binary_integer;

? ? a num_array;

begin

? ? for i in 1..10 loop

? ? ? a(i):=i;

? ? end loop;

? ? for i in 1..10 loop

? ? ? dbms_output.put_line(a(i));

? ? end loop;

end;

?

?

--例子一

declare

? ? type emp_array is table of emp%rowtype index by binary_integer;

? ? a emp_array;

begin

? ? select * bulk collect into a from emp;

? ? for i in a.first..a.last loop

? ? ? dbms_output.put_line(a(i).ename||‘ ?‘||a(i).job);

? ? end loop;

end;

--集合中装有集合

declare

? ? type record1 is record(

? ? ? ? ?vempno emp.empno%type,

? ? ? ? ?vename emp.ename%type,

? ? ? ? ?vsal ? emp.sal%type

? ? );

? ? type record2 is record(

? ? ? ? ?vdeptno emp.deptno%type,

? ? ? ? ?vrecord record1

? ? );

? ? a record1;

? ? b record2;

begin

? select empno,ename,sal into a from emp where empno=7369;

? b.vrecord:=a;

? dbms_output.put_line(b.vrecord.vempno);

? dbms_output.put_line(b.vrecord.vename);

? dbms_output.put_line(b.vrecord.vsal);

end;

--

declare

? ? type cc is table of varchar2(20) index by varchar2(20);

? ? a cc;

begin

? ? a(‘beijing‘):=‘china‘;

? ? a(‘dongjing‘):=‘japan‘;

? ? a(‘huashengdun‘):=‘usa‘;

? ? dbms_output.put_line(a(‘beijing‘));

end;

学习pl/sql之一

标签:

pl/sql是什么?是标准的sql语言?什么MySQL都支持?

PL/SQL也是一种程序语言,x0dx0a叫做过程化SQL语言(Proceral Language/SQL)。x0dx0aPL/SQL是Oracle数据库对SQL语句的扩展。x0dx0a在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。x0dx0ax0dx0aPL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。

OraclePL/SQL基础知识及其相关概念

结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于*语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些*为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑

一 编程基础知识

程序结构

Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成

控制结构

Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构

) 条件结构

与其它语言完全类似 语法结构如下

if condition then

statement

else

statement

end if ;

)循环结构

这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构

a loop … end loop;

b while condition loop … end loop;

c for variable in low_bound upper_bound loop … end loop;

其中的 … 代表循环体

)顺序结构

实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰

变量声明与赋值

Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar

)number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]

其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数

)varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]

其中size为可选 表示该字符串所能存储的最大长度

在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;

如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;

SQL基本命令

PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下

) 数据定义语言(DDL) Create Drop Grant Revoke …

) 数据操纵语言(DML) Update Insert Delete …

) 数据控制语言(DCL) Commit Rollback Savapoint …

) 其他 Alter System Connect Allocate …

具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述

二 过程与函数

Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值

其语法结构为

过程 Create or replace procere procname(参数列表) as PL/SQL语句块

函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块

三 游标

游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;

四 其他概念

Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念

lishixin/Article/program/Oracle/201311/18883

    OraclePL/SQL基础知识及其相关概念

    结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于*语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些*为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑

    一 编程基础知识

    程序结构

    Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成

    控制结构

    Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构

    ) 条件结构

    与其它语言完全类似 语法结构如下

    if condition then

    statement

    else

    statement

    end if ;

    )循环结构

    这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构

    a loop … end loop;

    b while condition loop … end loop;

    c for variable in low_bound upper_bound loop … end loop;

    其中的 … 代表循环体

    )顺序结构

    实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰

    变量声明与赋值

    Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar

    )number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]

    其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数

    )varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]

    其中size为可选 表示该字符串所能存储的最大长度

    在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;

    如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;

    SQL基本命令

    PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下

    ) 数据定义语言(DDL) Create Drop Grant Revoke …

    ) 数据操纵语言(DML) Update Insert Delete …

    ) 数据控制语言(DCL) Commit Rollback Savapoint …

    ) 其他 Alter System Connect Allocate …

    具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述

    二 过程与函数

    Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值

    其语法结构为

    过程 Create or replace procere procname(参数列表) as PL/SQL语句块

    函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块

    三 游标

    游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;

    四 其他概念

    Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念

    lishixin/Article/program/Oracle/201311/18883

      plsql 如何在已有的表中再加一列

      1、首先,在电脑中找到PLSQL Developer;

      2、双击打开PLSQL Developer,账号登录;

      3、登录之后,打开SQL窗口

      4、在运行窗口执行SQL“alter table tb1 add aa varchar2(20);”给表tb1添加一个名为aa的字段

      5、添加完就多出一列了

      扩展资料:

      plsql基本命令:

      PL/SQL使用的数据库操作语言还是基于SQL的,所以熟悉SQL是进行PL/SQL编程的基础。SQL语言的分类情况大致如下:

      1、数义语言(DDL):Create,Drop,Grant,Revoke,…

      2、数据操纵语言(DML):Update,Insert,Delete,…

      3、数据控制语言(DCL):Commit,Rollback,Savepoint,…

      4、其他:Alter System,Connect,Allocate, …

      参考资料来源:百度百科——plsql

      PL/SQL基础的块结构

      PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:

      声明部分(Declaration section)

      声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。

      执行部分(Executable section)

      执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。

      异常处理部分(Exception section)

      这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。

      PL/SQL块语法

      [DECLARE]

      ---declaration statements

      BEGIN

      ---executable statements

      [EXCEPTION]

      ---exception statements

      END

      PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。

      PL/SQL块的命名和匿名

      PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在服务器端也可以用在客户端。

      命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。

      PL/SQL程序块可背编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:

      . 函数

      . 过程

      . 包

      . 触发器

      Top