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 10.2.0.1 如何安装 ProC ?????
- vb操作oracle的blob字段的问题
- 有关oracle查询语句性能的问题,附带执行计划。请有经验的朋友帮忙看看,谢谢。
- 如何使用SmartQurey或者OraQuary读取Oracle表内容
- SQL语句问题.分全部给正确者
- 我需要連接兩個server,讓他們的數據互傳,要怎么做??
- 一个复杂的TRIGGER!! 救急!!!
- 判断日期(在线)
- oracle存储过程
- oracle中的问题.
- 我想创建一个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的值上来