函数能不能用dbms_output.put_line()输出?

小鸟向前飞 2010-08-02 07:24:44
--创建一个表
create table salary_details
(
empcode varchar2(10) not null,
workdays number,
salary number,
constraints salary_details_empcode_pk primary key(empcode)
);
这是我写的函数
--利用在问题1种创建的salary_details表,创建work_days函数,
--接受EMPCODE雇员编号,并检查所有雇员的工作天数。
--标准工作天数为22天,雇员每少工作一天从其工资中扣除50元。
--函数输出雇员最后的工资,工作天数多于标准天数不加工资,
--工资扣完为止,不可为负值。
create or replace function xn_calday1(code varchar2)
return number is v_sal number;
v_days number;
begin
select workdays into v_days from salary_details where empcode=code;
if v_days>=22 then
select salary into v_sal from salary_details where empcode=code;
--dbms_output.put_line(code||'工作了'||v_days||'天,工资是:'||v_sal);
elsif v_days<22 then
select salary into v_sal from salary_details where empcode=code;
v_sal:=v_sal-(22-v_days)*50;
if v_sal<=0 then
v_sal:=0;
--dbms_output.put_line(code||'工作了'||v_days||'天,工资是:'||'0');
end if;
--dbms_output.put_line(code||'工作了'||v_days||'天,工资是:'||v_sal);
end if;
dbms_output.put_line(code||'工作了'||v_days||'天,工资是:'||v_sal);
return v_sal;
end;
为什么最后没有在窗口中打印出“code||'工作了'||v_days||'天,工资是:'||v_sal”?
...全文
625 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小鸟向前飞 2010-08-09
  • 打赏
  • 举报
回复
谢谢了 结贴散分了
  • 打赏
  • 举报
回复
把注释符去掉
set serveroutput on
勇敢的心515 2010-08-03
  • 打赏
  • 举报
回复
应该是可以的啊。
duqiangcise 2010-08-03
  • 打赏
  • 举报
回复
在sqldeveloper中不知道这么设置。
但你可以在sql*plus中国执行呀!
向上面说的那样:执行前设置一下:
set serveroutput on;
然后再执行相应的函数即可!
var aaa number;
select calday1('xn001') into :aaa from dual;
print aaa;

心中的彩虹 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 keke_zkt 的回复:]
--创建一个表
create table salary_details
(
empcode varchar2(10) not null,
workdays number,
salary number,
constraints salary_details_empcode_pk primary key(empcode)
);
这是我写的函数
--利用在问题1种创建的sala……
[/Quote]
你开启输出显示看 set serveroutput on
iihero 2010-08-03
  • 打赏
  • 举报
回复
显然可以,在sql命令行下,先把output 开关打开:
set serveroutput on;
然后执行你的函数。
dbms_output.put_line主要用作调试。
netqiqi 2010-08-03
  • 打赏
  • 举报
回复
在命令窗口输入SQL> set serveroutput on;
把输出打开
小鸟向前飞 2010-08-02
  • 打赏
  • 举报
回复
set serveroutput on了
在sql/developer中
var aaa number;
call calday1('xn001')into:aaa;
这个时候回车 不打印
print aaa;
的时候还是没有dbms的串
Phoenix_99 2010-08-02
  • 打赏
  • 举报
回复
在命令窗口输入SQL> set serveroutput on;
把输出打开
虫洞 2010-08-02
  • 打赏
  • 举报
回复
楼主set serverout on;没
C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,2); begin select avg(price) into dig from products; dbms_output.put_line('电子产品的平均价格是'||dig); end; --PL/SQL基础3 根据产品编号获得产品对象 --pname products.name%type; pname变量的类型与products.name列的类型一样 declare pid constant products.id%type:=1; --定义常量,初值1 pname products.name%type; pdate products.adddate%type; begin --pid:=1; select name,adddate into pname,pdate from products where id=pid; dbms_output.put_line('产品名称是:'||pname||',日期'||pdate); end; --PL/SQL基础4 根据产品编号获得产品对象 --obj products%rowtype; obj与products表的单行类型一样,可以通过点运算取值obj.price declare obj products%rowtype; begin select * into obj from products where id=&编号; dbms_output.put_line('产品名称是:'||obj.name||',价格:'||obj.price); end; --PL/SQL基础5 条件if declare vid products.id%type; vprice products.price%type; begin vid:=&编号; select price into vprice from products where id=vid; if vprice100 and vprice<=1000 then dbms_output.put_line('价格在100—1000之间'); else dbms_output.put_line('价格在1000以上'); end if; end; --PL/SQL基础5 多条件case begin case '&等级' when 'A' then dbms_output.put_line('优秀'); when 'B' then dbms_output.put_line('合格'); when 'C' then dbms_output.put_line('不合格'); end case; end; select id, name, typeid, price, adddate from products create table students( Id int primary key, sex int ) insert into students select 1,1 from dual union select 2,0 from dual union select 3,1 from dual union select 4,0 from dual union select 5,1 from dual insert into students(Id) values(6) select * from students; select translate(translate('1心1意 3心2意','1','一'),'3','三') from dual; select id,nvl(translate(translate(sex,1,'女'),0,'男'),'未知') from students; select id,case as 性别 from( sele
PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变的更强大。缺点是移植性不好。 编写一个存储过程,向表中添加数据。 1. create table mytest (name varchar2(30),passwd varchar2(30)); 2. create or replace procedure xxc_pro1 is begin insert into mytest values ('小红','m123'); end; 3. 调用过程 exec 过程名(参数1,参数2…)或call 过程名参数1,参数2…) ① exec xxc_pro1; 或者是 ② call xxc_pro1; pl/sql可以做什么? 块:包括过程、函数、触发器、包。 编写规范: 1. 注释 --:单行注释 eg:select * from emp where empno=7788;--取得员工信息 /*……*/多行注释 2. 表示符号(变量)的命名规范: ① 当定义变量时,建议用v_作为前缀:v_ename ② 当定义常量时,建议用c_作为前缀:c_rate ③ 当定义游标时,建议用_cursor作为后缀:emp_cursor ④ 当定义例外时,建议用e_作为前缀:e_error 块(block)是pl/sql的今本程序单元,编写pl/sql程序实际上就是在编写pl/sql块;pl/sql块由三部分组成:定义部分,执行部分,例外处理部分。 declare --可选部分 /*定义部分:定义常量,变量,游标,例外,复杂数据类型*/ begin --必选部分 /*执行部分:要执行的pl/sql语句和sql语句*/ exception --可选部分 /*例外处理部分:处理运行的各种错误*/ 实例1:只包含执行部分的pl/sql块 SQL> set serveroutput on --打开输出 SQL> begin 2 dbms_output.put_line('hello'); 3 end; 4 / 说明:dbms_output是oracle提供的包,该包包含一些过程,put_line就是其中之一。 实例2:包含定义部分和执行部分 SQL> declare 2 v_ename varchar2(5); 3 begin 4 select ename into v_ename from emp where empno = &no; 5 dbms_output.put_line('雇员名'||v_ename); 6 end; 7 / 说明:&:从控制台输入变量,会弹出一个对话框。 实例3.同时输出雇员名和工资 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno=&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 end; 8 / 包含定义,执行,和例外处理的pl/sql块。 实例4.当输入的员工号不存在时 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno =&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 exception --异常处理部分 8 when no_data_found then 9 dbms_output.put_line('请输入正确的员工号!'); 10 end; 11 / 以上为块的基础,下面来介绍块的各个组成:过程,函数,触发器,包。 过程 过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。 编写一个存储过程,可以输入雇员名和新工资来改变员工工资。 --案例 create or replace procedure xxc_pro3(newname in varchar2,newsal in number) is begin update emp set sal=newsal where ename=newname; end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧