pl/sql在sqlplus中编写好怎么运行?

declare
v_gender char(1);--没有赋初值
v_count binary_integer:=0;
v_total_sal number(9,2):=0;
v_today date:=sysdata+7;--初始值为当前日期七天后的日期
c_rate constant number(3,2):=8.25;/*一个值为8.25的常量*/
v_valid boolean not null :=true;
begin
v_gender:='a';
v_count:=v_count+10;
v_valid:false;
dbms_output.put_line(v_gender);
dbms_output.put_line(v_count);
dbms_output.put_line(v_total_sal);
dbms_output.put_line(v_today);
dbms_output.put_line(c_rate);
dbms_output.put_line(v_valid);
end;
比如这段代码,我在sqlplus中已经敲完了,但是敲回车没有任何反应,想问下这段代码在sqlplus中怎么运行啊,高手给说下啊!

这种匿名块敲完直接就运行了,不需要调用。
你敲这段代码之前先输入:
SET SERVEROUTPUT ON;
这样结果才会显示,
v_valid:false;
改为
v_valid:=false;
然后粘贴代码,粘贴完,回车,/,回车。追问

你帮我把上面那段代码完整地改下可以嘛?我按照你说的在敲这段代码之前,先输入SET SERVEROUTPUT ON;这个语句在sqlplus中,但是提示这个错误:unknown SET option beginning "SERVEROUTU..."能给个改好的吗?

追答

可以运行的啊、
连接进入sqlplus后、
set serveroutput on;
然后
declare
v_gender char(1);
v_count binary_integer:=0;
v_total_sal number(9,2):=0;
v_today date:=sysdate+7;
c_rate constant number(3,2):=8.25;
v_valid boolean not null :=true;
begin
v_gender :='a';
v_count :=v_count+10;
dbms_output.put_line(v_gender);
dbms_output.put_line(v_count);
dbms_output.put_line(v_total_sal);
dbms_output.put_line(v_today);
dbms_output.put_line(c_rate);
end;
/

PL/SQL中才有布尔类型、但是布尔类型变量只能用来判断、不能输出。
上面那段代码我执行过、成功运行了。

追问

declare
invalidCATEGORY EXCEPTION;
category varchar2(10);
BEGIN
category :='&Category';--1
if category not in ('附件','顶盖','备件')then--2
raise invalidCATEGORY ;--3
else
dbms_output.put_line('您输入的类别是'||category);
end if;
exception
when invalidCATEGORY THEN
DBMS_OUTPUT.PUT_LINE('无法识别该类别');
end;帮忙给解释标注程序意思运行出来Enter value for category我输入:ddd,提示成功

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
结尾敲 / 就行了
而且在声明的时候 要给数据类型 你有好几个都没有 运行有错追问

你帮我看下,我是初学者,我运行程序提示:Bind variable "FALSE" not declared.在sqlplus中。
我不知道那个地方错了,你告诉我哪里错了吗?另外在sqlplus中输入dbms_output.put_line(v_valid);等输出语句时,在sqlplus中能看到结果吗?你告诉哪里错了?

追答

declare
v_gender char(1);--没有赋初值
v_count binary_integer:=0;
v_total_sal number(9,2):=0;
v_today date:=sysdate+7;--初始值为当前日期七天后的日期
c_rate constant number(3,2):=8.25;/*一个值为8.25的常量*/
v_valid boolean not null :=true;
begin
v_gender:='a';
v_count:=v_count+10;
dbms_output.put_line(v_gender);
dbms_output.put_line(v_count);
dbms_output.put_line(v_total_sal);
dbms_output.put_line(v_today);
dbms_output.put_line(c_rate);
end;
在赋值的时候布尔类型那有个错少了个= 布尔类型不能直接输出

追问

create or replace procedure
find_emp(emp_no number)--啥意思
as
empname varchar2(20);
begin
select ename into empname--into是什么意思
from emp where empno=emp_no;
dbms_output.put_line('雇员姓名是'||empname);--||是什么意思
exception
when no_data_found then--no_data_found 这个可以改变吗?
dbms_output.put_line('雇员编号未找到');
end find_emp;这段代码标注号码是什么意思?帮解释下

追答

create or replace procedure
find_emp(emp_no number)--(输入的变量名 数字类型)
as
empname varchar2(20);
begin
select ename into empname--就是把ename的值给empname
from emp where empno=emp_no;
dbms_output.put_line('雇员姓名是'||empname);--||是连接两个字符串的符号 相当于+
exception
when no_data_found then--no_data_found 这个可以改变吗? then 后可以改
dbms_output.put_line('雇员编号未找到');
end find_emp;这段代码标注号码是什么意思?帮解释下 哪有标注号码?

追问

no_data_found这个是不是固定的exception啊,我改成no_data再运行程序,报错。你说then后可以改是什么意思?as等同于is吗?第一句定义个emp_no这个变量到底作用是什么啊。存储过程到底是干什么的啊?能实现什么功能?先定义个empname varchar2(20);然后select ename into empname from emp where empno=emp_no;这个到底是什么意思,到底是实现什么功能了啊。不明白,请你告诉下,另外在实际开发中什么情况用存储过程用的多吗?

追答

no_data_found这个是固定的exception,
as等同于is
emp_no这个变量到底作用是你在掉用的时候可以输入变量啊
存储过程是一个过程 里面有些操作
你调用存储过程可能做了很多部的语句
先定义个empname varchar2(20);然后select ename into empname from emp where empno=emp_no 是定义一个类型为varchar2(20)名为empname的变量
把select ename from emp where empno=emp_no 的结果给empname
实际工作有很多地方用到 ,比如通用的一些写日志的过程 等等..

追问

还有一个地方不明白,select ename from emp where empno=10吧。在这个语句中emp=10是emp这个表中有的,可以成为where条件。然而empno=emp_no中我不是很明白,emp_n0是在建过程的时候定义的,那empno=emp_no这个行的通吗?也没有说emp_no=10像empno中这样或者20等等。没有具体指,怎么能相等那?怎么就能做为where条件了那?

追答

emp_n0 的类型和empno一样
emp_n0的值等于你传入的数子啊
比如
exec find_emp(10);
那么调用的时候emp_n0的值就是10

追问

那这个还得需要传入参数是吧?那我没有传入像你说的10这个参数,但是也能创建过程。是不是不说这个过程只是符合语法,但是没有具体操作是吧,我说的具体操作比如说empno=10这样的现有的这样的值对吧?再问您下三大范式吧,第一范式我理解了就是创建字段的时候不能再分,比如创建个telephone,这个分为个人电话和单位电话,那请问您能简单好理解地给讲下第二范式和第三范式的意思吗?我看第二范式和第三范式的说明时不明白意思?

追答

1 第一范式(1NF)

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

2 第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

3 第三范式(3NF)

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

本回答被提问者采纳
第2个回答  2012-04-10
最好找个好用的工具 如PLSQL Developer
第3个回答  2012-04-10
键入 /
相似回答