create or replace procedure BILLDATE_PROC
(
strdate VARCHAR2,
strenddate VARCHAR2,
strBiz VARCHAR2
)
AS
BEGIN
EXECUTE IMMEDIATE 'create table TESTONESTR as(select ''20080401-20080417'' 日期,
(select propertyvalue from machineinfo where propertycode=''20'' and
macid=PAYMENTINFO.MACID) 营业厅, (select machinecode from machineindex
where macid=PAYMENTINFO.MACID) 设备编号,(select selectitemname from
dropdownlist where ddlname=''缴费状态'' and selectitemvalue=PAYSTATE)
缴费状态,count(PAYMONEY) 交易笔数, sum(PAYMONEY) 交易金额 from PAYMENTINFO
where (PAYMENTINFO.PAYDATETIME between to_date('||strdate||',''yyyymmdd'') and
to_date('||strenddate||',''yyyymmdd'')) and PAYMENTINFO.MACID in (select macid from
machineinfo where PropertyCode=''20'' and propertyvalue='||strBiz||')
group by PAYMENTINFO.MACID,PAYMENTINFO.PAYSTATE) order by 营业厅,设备编号,缴费状态';
END;这是我写的存储过程,我写execute BILLDATE_PROC('20080415','20080415','芙蓉区营业厅'); 调用
但是报错
*
ERROR 位于第 1 行:
ORA-00904: 无效列名
ORA-06512: 在"USERNAME.BILLDATE_PROC", line 9
ORA-06512: 在line 1
有哪位高手知道啥原因不,我把SQL语句独立出来是可以运行的。。
(
strdate VARCHAR2,
strenddate VARCHAR2,
strBiz VARCHAR2
)
AS
BEGIN
EXECUTE IMMEDIATE 'create table TESTONESTR as(select ''20080401-20080417'' 日期,
(select propertyvalue from machineinfo where propertycode=''20'' and
macid=PAYMENTINFO.MACID) 营业厅, (select machinecode from machineindex
where macid=PAYMENTINFO.MACID) 设备编号,(select selectitemname from
dropdownlist where ddlname=''缴费状态'' and selectitemvalue=PAYSTATE)
缴费状态,count(PAYMONEY) 交易笔数, sum(PAYMONEY) 交易金额 from PAYMENTINFO
where (PAYMENTINFO.PAYDATETIME between to_date('||strdate||',''yyyymmdd'') and
to_date('||strenddate||',''yyyymmdd'')) and PAYMENTINFO.MACID in (select macid from
machineinfo where PropertyCode=''20'' and propertyvalue='||strBiz||')
group by PAYMENTINFO.MACID,PAYMENTINFO.PAYSTATE) order by 营业厅,设备编号,缴费状态';
END;这是我写的存储过程,我写execute BILLDATE_PROC('20080415','20080415','芙蓉区营业厅'); 调用
但是报错
*
ERROR 位于第 1 行:
ORA-00904: 无效列名
ORA-06512: 在"USERNAME.BILLDATE_PROC", line 9
ORA-06512: 在line 1
有哪位高手知道啥原因不,我把SQL语句独立出来是可以运行的。。
解决方案 »
- Oracle 10g 掉电后,不能启动了。
- 关于用right join or left join补全的问题?
- solaris系统对oracle执行sql操作后,如何将select出的信息输出到指定文件呢??
- sqlldr导入能否挑字段
- 我的system用户不能以normal身份登录了,什么原因?
- 执行计划在那里查看呀!
- 回答问题,给高分,不够再加
- oracle9i的安装问题!!求求你们了!
- 求助:安装ORACLE GRID后CRS_STAT 只看到当前节点,脑裂?
- rank() over(partition by 怎么改成mysql的写法
- 我想创建一个TYPE文件,要做一个自定义TABLE类型,该怎么写啊? (HELP ME !!!)
- 各位前辈,高手,下面的存储过程怎么改啊??超简单,但不知道怎么改,改好送分
或者在PL\SQL的Command模式运行execute BILLDATE_PROC('20080415','20080415','芙蓉区营业厅');
ERROR 位于第 1 行:
ORA-00904: 无效列名
ORA-06512: 在"USERNAME.BILLDATE_PROC", line 9
ORA-06512: 在line 1
我是在SQL/PLUS里面运行的
create or replace procedure BILLDATE_PROC
(
strdate VARCHAR2,
strenddate VARCHAR2,
strBiz VARCHAR2
)
AS
var_sql varchar2(8000);
BEGIN
var_sql := 'create table TESTONESTR as(select ''20080401-20080417'' 日期,
(select propertyvalue from machineinfo where propertycode=''20'' and
macid=PAYMENTINFO.MACID) 营业厅, (select machinecode from machineindex
where macid=PAYMENTINFO.MACID) 设备编号,(select selectitemname from
dropdownlist where ddlname=''缴费状态'' and selectitemvalue=PAYSTATE)
缴费状态,count(PAYMONEY) 交易笔数, sum(PAYMONEY) 交易金额 from PAYMENTINFO
where (PAYMENTINFO.PAYDATETIME between to_date(' ¦ ¦strdate ¦ ¦',''yyyymmdd'') and
to_date(' ¦ ¦strenddate ¦ ¦',''yyyymmdd'')) and PAYMENTINFO.MACID in (select macid from
machineinfo where PropertyCode=''20'' and propertyvalue=' ¦ ¦strBiz ¦ ¦')
group by PAYMENTINFO.MACID,PAYMENTINFO.PAYSTATE) order by 营业厅,设备编号,缴费状态';
dbms_output.put_line(trim(var_sql));
--EXECUTE IMMEDIATE var_sql;
END;
拿到testwindow去测试:
declare
i number;
begin
BILLDATE_PROC('20080415','20080415','芙蓉区营业厅');
end;
查看testwindow的dbms output区里的sql语句,将其copy到sqlwindow去执行一下,看报哪个字段不存在的错误,修正那个字段名后再执行就可以了
declare
i number;
begin
BILLDATE_PROC('20080415','20080415','芙蓉区营业厅');
end;
我在执行这段代码的时候编译就通不过,还是报 无效列名的错误,
但是我把存储过程修改了一下,propertyvalue=' ¦ ¦strBiz ¦ ¦')这里
不传参数,直接写成propertyvalue=''芙蓉区营业厅''这样就可以了,
郁闷,不知道是什么原因
就可以执行成功了,但是查不出数据,我想两个双引号应该是变成这样 ‘芙蓉区营业厅’ 然后跟数据库的去匹配
所以匹配不上,有没有哪个高手可以解答啊。
为什么我前面两个参数都能用,这里就不行呢?
单纯执行
declare
i number;
begin
BILLDATE_PROC('20080415','20080415','芙蓉区营业厅');
end;
是没用的另:注意引号的用法,举例如下
SQL> select '''' from dual;''''
----
'SQL> select ',''' from dual;','''
-----
,'SQL> select '''a'',' from dual;'''A'','
--------
'a',SQL> select ''||'a'||',' from dual;''||'A'||','
------------
a,SQL>
然后发跟踪到的sql语句,即var_sql的值上来