请选择
进入手机版
|
继续访问电脑版
设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
快捷导航
登录
注册
Java
Web
UI
Python人工智能
大数据
搜索
搜索
搜索
热搜
活动
交友
discuz
本版
文章
帖子
用户
本版
文章
帖子
用户
道具
勋章
任务
相册
留言板
门户
排行榜
设置
我的收藏
退出
万和网校
»
论坛
›
java
›
Java高级
›
Oracle的高阶使用
›
pl/sql简介及代码块
1
2
/ 2 页
下一页
返回列表
查看:
2832
|
回复:
18
pl/sql简介及代码块
[复制链接]
小和老师
小和老师
当前离线
积分
246
70
主题
70
帖子
246
积分
管理员
积分
246
发消息
发表于 2019-5-31 16:13:27
|
显示全部楼层
|
阅读模式
pl/sql procedural language 过程化语言,是Oracle在标准的SQL基础之上的扩展,可以定义变量、使用逻辑控制语句。默认Oracle一次只能处理一条语句,如果使用PL/SQL,可以使用块组织多条语句,作为一个整体执行,只向数据库服务器发送一次请求调用。块,是pl/sql最基本的单元,由块可组成不同的程序形式,如匿名块、存储过程、函数、包、触发器等。本文将介绍块的使用。
1、系统、软件和约束条件
win10
oracle11g
sql developer
2、块
块的组成:定义部分【可选】、执行部分【必选】、异常处理部分【可选】
1 声明一个变量,打印
<span class="hljs-built_in">set</span> serveroutput on;--打开输出开关【每个终端执行一次即可】
<span class="hljs-built_in">declare</span> --申明部分
v_name varchar(20); --声明一个变量v_name
begin --执行部分开始
v_name := <span class="hljs-string">'zhangli'</span>; --给v_name赋值为zhangli
dbms_output.put_line(v_name);--打印变量到控制台
end; --执行部分结束
复制代码
2 使用type声明标量,接受键盘输入,打印
<span class="hljs-built_in">declare</span>
v_name emp.ename%<span class="hljs-built_in">type</span>; --声明一个简单变量v_name,以<span class="hljs-built_in">type</span>方式赋予类型
begin --执行部分开始
select ename into v_name from emp <span class="hljs-built_in">where</span> empno=&no;--接受键盘输入,将用户名称赋予v_name
dbms_output.put_line(v_name);--打印变量到控制台
end; --执行部分结束
复制代码
3 使用rowtype声明变量,接受键盘输入,打印
declare
v_emp_record emp%rowtype; --声明一个简单变量v_emp_record,以rowtype方式赋予类型
<span class="hljs-keyword">begin</span> --执行部分开始
select * into v_emp_record from emp where empno=&no;--接受键盘输入,将用户名称赋予v_emp_record
dbms_output.put_line(v_emp_record .ename<span class="hljs-params">||</span>v_emp_record.sal);--打印变量到控制台
<span class="hljs-keyword">end</span>; --执行部分结束
复制代码
4 申明复合类型,接受键盘输入,打印
<span class="hljs-built_in">declare</span>
<span class="hljs-built_in">type</span> emp_record_type is record (name emp.ename%<span class="hljs-built_in">type</span>,sal emp.sal%<span class="hljs-built_in">type</span>); --定义记录类型
v_emp_record emp_record_type; --定义记录类型的变量
begin --执行部分开始
select ename,sal into v_emp_record from emp <span class="hljs-built_in">where</span> empno=&no;--接受键盘输入,将用户名称赋予v_emp_record
dbms_output.put_line(v_emp_record .name||v_emp_record.sal);--打印变量到控制台
end; --执行部分结束
复制代码
5 pl/sql索引表
<span class="hljs-built_in">declare</span>
<span class="hljs-built_in">type</span> emp_table_type is table of emp.ename%<span class="hljs-built_in">type</span> index by binary_integer; --定义表类型
v_emp_table emp_table_type; --定义表类型的变量
begin
select ename into v_emp_table(-20) from emp <span class="hljs-built_in">where</span> empno=7369;--下表是整型,随意指定
select ename into v_emp_table(13) from emp <span class="hljs-built_in">where</span> empno=7654;
dbms_output.put_line(<span class="hljs-string">'7369姓名:'</span>||v_emp_table(-20)||<span class="hljs-string">',7654姓名:'</span>||v_emp_table(13));
end;
复制代码
6 pl/sql嵌套表
<span class="hljs-built_in">declare</span>
<span class="hljs-built_in">type</span> name_table is table of emp.ename%<span class="hljs-built_in">type</span>;--声明一个表类型
v_name_table name_table;
begin
v_name_table:=name_table(<span class="hljs-string">'abc'</span>,<span class="hljs-string">'efg'</span>);
dbms_output.put_line(v_name_table(1));
end;
复制代码
7 varray数组
declare
type a_array is varray(<span class="hljs-number">3</span>) of varchar2(<span class="hljs-number">10</span>); --定义数组类型
v_names a_array; --定义数组类型的变量
<span class="hljs-keyword">begin</span>
v_names <span class="hljs-symbol">:</span>=a_array(<span class="hljs-string">'zhangli'</span>,<span class="hljs-string">'ali'</span>,<span class="hljs-string">'xiaoli'</span>); --为数组元素赋值
dbms_output.put_line(v_names (<span class="hljs-number">1</span>)<span class="hljs-params">||</span><span class="hljs-string">','</span><span class="hljs-params">||</span>v_names (<span class="hljs-number">2</span>)<span class="hljs-params">||</span><span class="hljs-string">','</span><span class="hljs-params">||</span>v_names (<span class="hljs-number">3</span>));
<span class="hljs-keyword">end</span>;
复制代码
8 if表达式 ,输入雇员编号,查询工资,如果工资大于3000,显示白领;如果工资大于1500小于3000,显示蓝领,否则显示灰领
declare
v_sal emp.sal%type;
<span class="hljs-keyword">begin</span>
select sal into v_sal from emp where empno=&no;
<span class="hljs-keyword">if</span> v_sal>=<span class="hljs-number">3000</span> <span class="hljs-keyword">then</span>
dbms_output.put_line(<span class="hljs-string">'白领'</span>);
<span class="hljs-keyword">elsif</span> v_sal>=<span class="hljs-number">1500</span> <span class="hljs-keyword">and</span> v_sal<<span class="hljs-number">3000</span> <span class="hljs-keyword">then</span>
dbms_output.put_line(<span class="hljs-string">'蓝领'</span>);
<span class="hljs-keyword">else</span>
dbms_output.put_line(<span class="hljs-string">'灰领'</span>);
<span class="hljs-keyword">end</span> <span class="hljs-keyword">if</span>;
<span class="hljs-keyword">end</span>;
复制代码
9 case表达式,输入成绩等级,如果是A,输出perfect,如果是B输出very good,如果是C输出good,否则输出bad
declare
v_grade varchar2(<span class="hljs-number">1</span>);
v_comm varchar2(<span class="hljs-number">20</span>);
<span class="hljs-keyword">begin</span>
<span class="hljs-symbol">v_grade:</span>=upper(<span class="hljs-string">'&grade'</span>);
<span class="hljs-keyword">case</span> v_grade
<span class="hljs-keyword">when</span> <span class="hljs-string">'A'</span> <span class="hljs-keyword">then</span> <span class="hljs-symbol">v_comm:</span>=<span class="hljs-string">'perfect'</span>;
<span class="hljs-keyword">when</span> <span class="hljs-string">'B'</span> <span class="hljs-keyword">then</span> <span class="hljs-symbol">v_comm:</span>=<span class="hljs-string">'very good'</span>;
<span class="hljs-keyword">when</span> <span class="hljs-string">'C'</span> <span class="hljs-keyword">then</span> <span class="hljs-symbol">v_comm:</span>=<span class="hljs-string">'good'</span>;
<span class="hljs-keyword">else</span> <span class="hljs-symbol">v_comm:</span>=<span class="hljs-string">'bad'</span>;
<span class="hljs-keyword">end</span> <span class="hljs-keyword">case</span>;
dbms_output.put_line(v_comm);
<span class="hljs-keyword">end</span>;
复制代码
10 loop循环,从1打印到20
declare
v_i number(<span class="hljs-number">2</span>)<span class="hljs-symbol">:</span>=<span class="hljs-number">1</span>;
<span class="hljs-keyword">begin</span>
loop
dbms_output.put_line(v_i);
<span class="hljs-symbol">v_i:</span>=v_i+<span class="hljs-number">1</span>;
exit <span class="hljs-keyword">when</span> v_i><span class="hljs-number">20</span>;
<span class="hljs-keyword">end</span> loop;
<span class="hljs-keyword">end</span>;
复制代码
11 while循环,从1打印到20
declare
v_i number(<span class="hljs-number">2</span>);
<span class="hljs-keyword">begin</span>
<span class="hljs-symbol">v_i:</span>=<span class="hljs-number">1</span>;
<span class="hljs-keyword">while</span> v_i<=<span class="hljs-number">20</span>
loop
dbms_output.put_line(v_i);
<span class="hljs-symbol">v_i:</span>=v_i+<span class="hljs-number">1</span>;
<span class="hljs-keyword">end</span> loop;
<span class="hljs-keyword">end</span>;
复制代码
12 for循环,从1打印到20
<span class="hljs-keyword">begin</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-number">1</span>..<span class="hljs-number">20</span>
loop
dbms_output.put_line(i);
<span class="hljs-keyword">end</span> loop;
<span class="hljs-keyword">end</span>;
复制代码
13 使用循环完成乘法口诀
declare
v_i number(<span class="hljs-number">10</span>) <span class="hljs-symbol">:</span>= <span class="hljs-number">1</span>;
v_line number(<span class="hljs-number">10</span>) <span class="hljs-symbol">:</span>=<span class="hljs-number">1</span>;
v_abc varchar(<span class="hljs-number">200</span>) default <span class="hljs-string">''</span>;
<span class="hljs-keyword">begin</span>
loop
<span class="hljs-keyword">for</span> v_i <span class="hljs-keyword">in</span> <span class="hljs-number">1</span>..v_line
loop
<span class="hljs-symbol">v_abc:</span>= v_abc <span class="hljs-params">||</span> v_i<span class="hljs-params">||</span><span class="hljs-string">'*'</span><span class="hljs-params">||</span>v_line<span class="hljs-params">||</span><span class="hljs-string">'='</span><span class="hljs-params">||</span>v_i*v_line<span class="hljs-params">||</span><span class="hljs-string">' '</span>;
--dbms_output.put_line(v_i*v_line);
<span class="hljs-keyword">end</span> loop;
dbms_output.put_line(v_abc);
v_abc <span class="hljs-symbol">:</span>=<span class="hljs-string">''</span>;
<span class="hljs-symbol">v_line:</span>=v_line+<span class="hljs-number">1</span>;
exit <span class="hljs-keyword">when</span> v_line><span class="hljs-number">9</span>;
<span class="hljs-keyword">end</span> loop;
<span class="hljs-keyword">end</span>;
复制代码
至此,我们熟悉了pl/sql编程中的块,为我们下面的学习打下了基础。
回复
使用道具
举报
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
用户反馈
客户端