PL/SQl执行sql语句块没有返回值,也不报错

wolf1023 2011-02-12 05:35:21
declare sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn out varchar2(20) ;
sDeptName out Varchar2(50) ;
nStopFlag out NUMBER ;
dynamic_sql VARCHAR2(800);

BEGIN
SELECT deptcode,DeptName,StopFlag
INTO sDeptCodeReturn, sDeptName,nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001' ;

exception
when no_data_found then
begin
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
end;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dynamic_sql :=' select ' + sDeptCodeReturn + ' as deptcode, ' + sDeptName + ' as DeptName,' + nStopFlag + ' as StopFlag from System.Pub_Department' ;
execute immediate dynamic_sql;


end;
...全文
721 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolf1023 2011-02-18
  • 打赏
  • 举报
回复
值是有,问题是怎么返回到C#dataset里table里,C#执行的是一段SQl语句

有知道的么,请多指教
心中的彩虹 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wolf1023 的回复:]
declare sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn varchar2(20) ;
sDeptName Varchar2(50) ;
nStopFlag NUMBER ;
dynamic_sql VARCHAR2(800);

BEGIN
SELECT deptcode,DeptName,StopFlag ……
[/Quote]








---nStopFlag =0就是有记录 你还放到no_data_found 异常里面去


declare
sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn varchar2(20) ;
sDeptName Varchar2(50) ;
nStopFlag NUMBER ;

BEGIN
SELECT deptcode,DeptName,StopFlag
INTO sDeptCodeReturn, sDeptName,nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001' ;
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dbms_output.put_line(sDeptCodeReturn||' '||sDeptName ||' '||nStopFlag );
exception
when others then
dbms_output.put_line(sqlcode||' '||sqlerrm);
end;















wolf1023 2011-02-16
  • 打赏
  • 举报
回复
值是有,问题是怎么返回到C#dataset里table里,C#执行的是一段SQl语句
oracle_dba_11 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wolf1023 的回复:]
调试是没有问题,我就是没有得到结果集,数据时有的
[/Quote]

实际上已经有了。你在exception
前面加上
dbms_output.putline(sDeptCodeReturn)
看看有没有数据就知道了。
wolf1023 2011-02-16
  • 打赏
  • 举报
回复
declare
sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn varchar2(20) ;
sDeptName Varchar2(50) ;
nStopFlag NUMBER ;

BEGIN
SELECT deptcode,DeptName,StopFlag
INTO sDeptCodeReturn, sDeptName,nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001' ;
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dbms_output.put_line(sDeptCodeReturn||' '||sDeptName ||' '||nStopFlag );
exception
when others then
dbms_output.put_line(sqlcode||' '||sqlerrm);
end;
如何把 sDeptCodeReturn,sDeptName ,nStopFlag 返回到C#的dataset里,C#执行的是一条SQL语句
wlb002 2011-02-16
  • 打赏
  • 举报
回复
跟踪一下就知道了啊
wolf1023 2011-02-15
  • 打赏
  • 举报
回复
declare sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn varchar2(20) ;
sDeptName Varchar2(50) ;
nStopFlag NUMBER ;
dynamic_sql VARCHAR2(800);

BEGIN
SELECT deptcode,DeptName,StopFlag
INTO sDeptCodeReturn, sDeptName,nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001' ;

exception
when no_data_found then
begin
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
end;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dynamic_sql :=' select ' + sDeptCodeReturn + ' as deptcode, ' + sDeptName + ' as DeptName,' + nStopFlag + ' as StopFlag from System.Pub_Department' ;
execute immediate dynamic_sql;


end;

为什么没有返回数据,有知道的么,请多关照,
kingkingzhu 2011-02-15
  • 打赏
  • 举报
回复
怎么会有输出 你的代码全到exception里去了
你的逻辑有问题啊

declare
sDeptCode VARCHAR(20) := '0001';
sDeptCodeReturn varchar2(20);
sDeptName Varchar2(50);
nStopFlag NUMBER;
dynamic_sql VARCHAR2(800);


--要么给nStopFlag附初值 nStopFlag NUMBER := 0;BEGIN

SELECT deptcode, DeptName, StopFlag
INTO sDeptCodeReturn, sDeptName, nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001';
--要么 dbms_output.put_line(nStopFlag);exception
when no_data_found then
begin
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
end;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dynamic_sql := ' select ' + sDeptCodeReturn + ' as deptcode, ' +
sDeptName + ' as DeptName,' + nStopFlag +
' as StopFlag from System.Pub_Department';
execute immediate dynamic_sql;
--要么 dbms_output.put_line(dynamic_sql);end;
wolf1023 2011-02-14
  • 打赏
  • 举报
回复
调试是没有问题,我就是没有得到结果集,数据时有的
心中的彩虹 2011-02-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 wolf1023 的回复:]
declare sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn out varchar2(20) ;
sDeptName out Varchar2(50) ;
nStopFlag out NUMBER ;
dynamic_sql VARCHAR2(800);

BEGIN
SELECT deptcode,DeptNa……
[/Quote]

去掉out 其他没什么问题 另外你最后的执行动态语句有何用 返回结果集?


我这边调试没有任何问题
eviler 2011-02-12
  • 打赏
  • 举报
回复
这是oracle 不是 sql server
eviler 2011-02-12
  • 打赏
  • 举报
回复
你的写法有问题

1. 你exception 后面语句都被认为 属于 exception ,也就是 你第一个select 没有问题的话,下面的是不执行 的

2. 你最后 execute 想要显示 结果集 ,但是oracle 没有这种写法
wolf1023 2011-02-12
  • 打赏
  • 举报
回复
数据肯定有,
而且单独执行下面的语句是可以出数据的
select 1 as deptcode, 2 as DeptName, 3 as StopFlag from System.Pub_Department
wolf1023 2011-02-12
  • 打赏
  • 举报
回复
我这是pl/sql界面,不是sqlplus界面,不用 设置set serveroutput on
minitoy 2011-02-12
  • 打赏
  • 举报
回复
set serveroutput on
了也没显示么?
wolf1023 2011-02-12
  • 打赏
  • 举报
回复
declare sDeptCode VARCHAR(20) :='0001';
sDeptCodeReturn varchar2(20) ;
sDeptName Varchar2(50) ;
nStopFlag NUMBER ;
dynamic_sql VARCHAR2(800);

BEGIN
SELECT deptcode,DeptName,StopFlag
INTO sDeptCodeReturn, sDeptName,nStopFlag
FROM System.Pub_Department
WHERE deptcode = '0001' ;

exception
when no_data_found then
begin
if sDeptCodeReturn is null THEN
raise_application_error(-20016, '此部门不存在');
end if;
end;
IF nStopFlag = 0 THEN
raise_application_error(-20016, '此部门已停用');
END if;
dynamic_sql :=' select ' + sDeptCodeReturn + ' as deptcode, ' + sDeptName + ' as DeptName,' + nStopFlag + ' as StopFlag from System.Pub_Department' ;
execute immediate dynamic_sql;


end;



刚才多了几个关键字 out
gelyon 2011-02-12
  • 打赏
  • 举报
回复
no problem

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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