oracle PL/SQL基础编程
PL/SQL(Procedural Language/SQL)是oracle中引入的一种过程化编程语言
PLS-00103:出现符号"declare"在需要下列之一时
符号"begin"被替换为"declare"后继续
存储过程里不需要用declare关键字
PLS-00103:出现符号"end-of-file"在需要下列之一时:
end要和if以及begin匹配,完了之后要用/来表示完了
create or replace procedure addStu is
v_NewMajor varchar2(10):='Chemistry';
v_FirstName varchar2(10):='Scott';
v_LastName varchar2(10):='Tiger';
begin
update students
set major=v_NewMajor
where first_name=v_FirstName
and last_name = v_LastName; if sql%notfound then
insert into students (first_name, last_name, major)
values (v_FirstName, v_LastName, v_NewMajor);
end if;
end;
/
select text from user_source where name = upper('addStu') and type = 'PROCEDURE';
这里好像一定要用upper('addStu')不然就会出现为选行。
执行过程的时候
exec 过程名
call 过程或函数
首先创建一个临时表
create table temp_table (
my_com varchar2(35),
vcomment varchar2(35));
spool命令可以指定路径和文件名,需要有写权
create or replace procedure edtmp is
/* 存储过程编程示例 */
v_Number number(5) :=115;
v_Comment varchar2(35);
begin
if v_Number < 500 then v_Comment := 'Too small';
insert into temp_table (my_com, vcomment)
values ('This is too cazy', v_Comment); elsif v_Number < 1000 then v_Comment := 'A little bigger';
insert into temp_table (my_com, vcomment)
values ('This is only luck', v_Comment); else v_Comment := 'That enough';
insert into temp_table (my_com, vcomment)
values ('Maybe good',v_Comment); end if;
end;
/
PL/SQL构建于SQL之上,可以用来编写包含SQL语句的程序。
(那么这个和其他编程语言通过驱动连接到数据库对数据进行操作的不同之出在于?)
PL/SQL中可以包括:
块结构
变量和类型
条件逻辑
循环
游标,保存查询返回的结果
过程
函数
包,可以把过程和函数组合到一个单元中。
数据抽象
create type可以用来定义对象类型
在过程中执行另一个过程时直接写过程名就行了
PLS-00428:在此select语句中缺少INTO子句
答:在PL/SQL程序中不允许出现不带into子句的select语句,查询出来的数据必须得找个容器来装。
有这样一段过程
create or replace procedure instu is
rem 使用单行注释
v_major varchar2(10):='Germany'; -- 定义专业
v_first_name varchar2(10):='Fisher'; -- 定义姓氏
v_last_name varchar2(10):='Mark'; -- 定义名字
begin
-- 将这三个作为一条信息插入到表中
insert into students (major, first_name, last_name) values
(v_major, v_first_name, v_last_name);
end;
/
然后就报错了
PLS-00103:出现符号在需要下列之一时
:= . ( @ %
; not null range default character
我还以为中文字符打进去了,原来全是第二句报的错。
http://www.linuxidc.com/Linux/2012-07/65272.htm
这里给了我答案,原来rem是remark的缩写,只能用在sql plus 的单行命令中,
而不能用在PL/SQL中,在PL/SQL中只能使用--或者/* */进行注释,这个问题纠结了半天,就是没想到是该死的rem,
真真是叫哔了狗。
在oracle中重新编译存储过程的方法:
http://blog.itpub.net/26686207/viewspace-1144800/
第一种:如果使用PL/SQL Developer工具
左侧工具栏中选中“存储过程”-》选择已经失效的procedure-》右键-》选择重新编译即可
第二种:命令行版
1、查找无效对象
select 'Alter '|| object_type ||' '||object_name||' compile;' from user_objects where status = 'INVALID';
2、重新编译存储过程procedure_name,执行下面的脚本即可
alter procedure procedure_name compile;
my_title books.title%TYPE;
这里的意思是my_title这个变量的类型和表books中字段title的类型是一样的
oracle设置显示的行数和列数
show pagesize;
set pagesize 100;
shole linesize;
set linesize 100;
DBMS_OUTPUT是用来输出信息的,这是一个PL/SQL的系统包,但是有个前提是要设置一下:
set serveroutput on
为何感觉我总是很逗比
create or replace procedure usecur as -- 声明这两个变量
v_first_name varchar2(20);
v_last_name varchar2(20); -- 声明游标
cursor c_Students is
select first_name, last_name
from students; begin
-- 启动游标进程
open c_Students;
loop
fetch c_Students into v_first_name, v_last_name;
exit when c_Students%NOTFOUND;
--如果找到Scott就退出
while v_first_name = 'Scott' loop
exit;
end loop;
end loop;
-- 过程结束
-- 不用的话就及时关闭游标进程
close c_Students;
if v_first_name = 'Scott' then
DBMS_OUTPUT.PUT_LINE('找到这个傻叉了');
else
DBMS_OUTPUT.PUT_LINE('找不到这个傻叉');
end if;
end;
/
oracle PL/SQL基础编程的更多相关文章
- Oracle数据库—— PL/SQL基础编程
一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs) ...
- 二十、oracle pl/sql基础
一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍 ...
- oracle pl/sql 基础
一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍 ...
- PL/SQL 基础编程
PL/Sql 编程 PL/Sql结构 [declare] --声明变量 begin --执行部分 [exception] ---异常处理部分 end PL/Sql 基本数据类型 数值类型 1. nu ...
- Oracle pl/sql 基础入门语法
PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成:1 声明 此部分开头使用关键字DECLARE.它是一个可选的部分,并限定在该程序中使用的 ...
- Oracle PL/SQL 高级编程
1. 复合数据类型--记录类型 Ø 语法格式 type 类型名 is record ( 字段1 字段1类型 [not null]:=表达式1; 字段2 字段2类型 [not n ...
- Oracle PL/SQL DBA 编程实践基础
[附:一文一图]
- Oracle PL/SQL基础
1.下载sql developer数据库连接可视化工具 连接地址:点我下载 下载完成,安装有Java环境,解压即可运行,也可以在linux系统中运行.
- 浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
随机推荐
- Jquery中$(document).ready()与传统JavaScript中的window.onload方法的区别(2016/8/3)
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 ...
- HID USB设备开发技术【转】
本文转载自: 1.高速USB和USB2.0有区别吗? 高速USB和USB2.0是有区别的,区别在于USB2.0是一种规范,而"高速USB"仅指在USB2.0规范中数据传输率 ...
- 161101、在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类
30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...
- 将linux下的rm命令改造成移动文件至回收站【转】
转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移 ...
- 使用BBCP来提升跨互联网的数据传输速度
背景介绍: 目前项目在美国东西部以及欧洲都有服务器节点,跨互联网的数据传输速度很不稳定,之前我们主要是通过SCP以及Rsync等方式进行数据传输的. 无意间发现了BBCP这个软件之后,经过测试,效果非 ...
- $IFS和set
$IFS是内部字段分隔符的缩写.它决定Bash解析字符串时将怎样识别字段,或单词分界线.默认为(空格.制表符.换号) 修改$IFS: [xiluhua@vm-xiluhua][~/shell_scri ...
- yii2框架安装
注意:先把php.ini里面的php_openssl.dll扩展打开 1.下载yii2框架的文件包yii-advanced-app-2.0.7 2.打开路径为advanced下面的init.bat ...
- python: html
1. 三把利剑(html css js) css(颜色 位置) js (动) 2. 标签的分类:块级标签和行内标签 块级标签(div h p) 行内标签(span) 3. 标签存在的意义:为了方便操作 ...
- HDU-1042 N!
首先明白这是大数问题,大数问题大多采用数组来实现.如何进位.求余等.比如1047 (Integer Inquiry): 对于1042问题 计算10000以内数的阶乘,因为10000的阶乘达到35660 ...