缺失右括号的问题??

qiang521qiang 2010-01-14 05:35:21

我现在有一个这样的 过程
但是执行总是报 缺失右括号 不知道为什么 大家帮忙看看

create or replace procedure test_p is
type tcur is ref cursor;
fi_cur1 tcur;
dos1 date;
dos30 date;
begin
dos1 := to_date('2006-01-01','yyyy-mm-dd');
dos30 := to_date('2006-11-01','yyyy-mm-dd');
open fi_cur1 for ' select distinct mbrid from fi06
where ( mbrid=''1000'' and dos >= '||dos1||' and dos <= '||dos30||')';
--。。。。
end test_p;
...全文
1170 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiang521qiang 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 crazylaa 的回复:]
' select distinct mbrid from  '||name||'
                  where ( mbrid=''1000'' and dos >= to_date('''||dos1||''',''yyyy-mm-dd'') and dos <= to_date('''||dos30||''',''yyyy-mm-dd''))';

dos1,dos30是字符串。

[/Quote]
谢谢你 问题解决了
结贴给分了
duqiangcise 2010-01-14
  • 打赏
  • 举报
回复
忘记了问你dos列的数据类型是什么了?如果是varchar2类型的话,那么要转一下型(to_date)。
转成和dos1,dos30一样的格式。
duqiangcise 2010-01-14
  • 打赏
  • 举报
回复
create or replace procedure test_p 
is
type tcur is ref cursor;
fi_cur1 tcur;
dos1 date;
dos30 date;

begin

dos1 := to_date('2006-01-01','yyyy-mm-dd');
dos30 := to_date('2006-11-01','yyyy-mm-dd');
open fi_cur1 for ' select distinct mbrid from fi06 where ( mbrid='||chr(39)||'1000'||chr(39)|| 'and dos >= '||dos1||' and dos <= '||dos30||')';

end test_p;
crazylaa 2010-01-14
  • 打赏
  • 举报
回复
' select distinct mbrid from '||name||'
where ( mbrid=''1000'' and dos >= to_date('''||dos1||''',''yyyy-mm-dd'') and dos <= to_date('''||dos30||''',''yyyy-mm-dd''))';

dos1,dos30是字符串。
qiang521qiang 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 crazylaa 的回复:]
引用 5 楼 qiang521qiang 的回复:
引用 4 楼 crazylaa 的回复:
你这个不属于动态游标。mbrid已经改为一个单引号的固定的了。
动态游标一般是表名、字段名是变量才需要用到。值是变量的话用不着的。

对了  忘记告诉你了  我的这个本来是表明是个变量
但是我为了简化问题 我就把那个给去掉了
其实表明是个变量
现在就是说缺失右括号不知道为什么?


这样啊,那你的to_date得写到sql中去,把你的'2009-01-01'作为参数
||连接得是字符串。
[/Quote]


你的意思是
create or replace procedure test_p is
type tcur is ref cursor;
fi_cur1 tcur;
dos1 varchar2(20);
dos30 varchar2(20);
name varchar2(20);
begin
dos1 := '2006-01-01';
dos30 := '2006-11-01';
name := 'fi06';
open fi_cur1 for ' select distinct mbrid from '||name||'
where ( mbrid=''1000'' and dos >= '||to_date(dos1,'yyyy-mm-dd')||' and dos <= '||to_date(dos30,'yyyy-mm-dd')||')';
end test_p;

但是还是是不可以的还是报 缺失右括号
crazylaa 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qiang521qiang 的回复:]
引用 4 楼 crazylaa 的回复:
你这个不属于动态游标。mbrid已经改为一个单引号的固定的了。
动态游标一般是表名、字段名是变量才需要用到。值是变量的话用不着的。

对了  忘记告诉你了  我的这个本来是表明是个变量
但是我为了简化问题 我就把那个给去掉了
其实表明是个变量
现在就是说缺失右括号不知道为什么?
[/Quote]

这样啊,那你的to_date得写到sql中去,把你的'2009-01-01'作为参数
||连接得是字符串。
qiang521qiang 2010-01-14
  • 打赏
  • 举报
回复

create or replace procedure test_p is
type tcur is ref cursor;
fi_cur1 tcur;
dos1 date;
dos30 date;
name varchar2(20);
begin
dos1 := to_date('2006-01-01','yyyy-mm-dd');
dos30 := to_date('2006-11-01','yyyy-mm-dd');
name := 'fi06';
open fi_cur1 for ' select distinct mbrid from '||name||'
where ( mbrid=''1000'' and dos >= '||dos1||' and dos <= '||dos30||')';
end test_p;
qiang521qiang 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crazylaa 的回复:]
你这个不属于动态游标。mbrid已经改为一个单引号的固定的了。
动态游标一般是表名、字段名是变量才需要用到。值是变量的话用不着的。
[/Quote]
对了 忘记告诉你了 我的这个本来是表明是个变量
但是我为了简化问题 我就把那个给去掉了
其实表明是个变量
现在就是说缺失右括号不知道为什么?
crazylaa 2010-01-14
  • 打赏
  • 举报
回复
你这个不属于动态游标。mbrid已经改为一个单引号的固定的了。
动态游标一般是表名、字段名是变量才需要用到。值是变量的话用不着的。
qiang521qiang 2010-01-14
  • 打赏
  • 举报
回复
mbrid 是 Varchar2 的
dos 是 date 的
qiang521qiang 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazylaa 的回复:]
select distinct mbrid from  fi06
                  where ( mbrid='1000' and dos >= dos1 and dos <= dos30);
单引号都去掉,已经是date类型的了
[/Quote]

不行吧 我这个是在动态游标中 我 for后面还有一对单引号呢?

open fi_cur1 for ' select distinct mbrid from fi06
where ( mbrid=''1000'' and dos >= '||dos1||' and dos <= '||dos30||')';

crazylaa 2010-01-14
  • 打赏
  • 举报
回复
select distinct mbrid from fi06
where ( mbrid='1000' and dos >= dos1 and dos <= dos30);
单引号都去掉,已经是date类型的了

17,140

社区成员

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

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