使用動態SQL語句就可以解決了...............
sqltxt:= 'select intareaid,strareacode,strareaname into is_a,is_b,is_c where ';
sqltxt:= sqltxt||'zdname'||'condition'||'''qing''' ';
execute immediate sqltxt ;
..............
sqltxt:= 'select intareaid,strareacode,strareaname into is_a,is_b,is_c where ';
sqltxt:= sqltxt||'zdname'||'condition'||'''qing''' ';
execute immediate sqltxt ;
..............
解决方案 »
- windows服务器关机前是否应先关闭Oracle?
- 求助,Oracle查询重复问题
- ora-01861:文字与格式字符串不匹配
- jsp连接oracle问题
- Oracle中功能类似于MS SQLServer的Isnull()函数是什么?
- 聪明的人:华为的1个合作商公司考的比试题???
- oracle用sql语句将一个表中符合条件,全部插入一张结构和它完全相同的临时表的疑问
- 很简单的问题,100分求助
- 又一个数据导出失败的问题!!!!!!!!!
- 同样的数据库同样的一条sql,一个正常运行,一个报标识符无效错误
- 调用创建表接着调用插入表函数就出错!
- 一个存储过程里有多个begin和end,这是怎么回事啊?
sqltxt:= 'select intareaid,strareacode,strareaname into is_a,is_b,is_c ';
sqltxt:= sqltxt||' where '||zdname||condition||'''qing''' ;
execute immediate sqltxt ;
我现在做的是定义一个包,用游标的形式返回。
create or replace table xxxx_temp(a [type],b [type], c [type]);sqltxt:= 'insert into xxxx_temp (a,b,c) select intareaid,strareacode,strareaname ';
sqltxt:= sqltxt||' where '||zdname||condition||'''qing''' ;
execute immediate sqltxt ;
--我的一個 存儲過程中的一段代碼
CREATE OR REPLACE PROCEDURE CM_PRO_EACH_LAYER
(
VAR_MON IN VARCHAR2
)
AS
.............begin
..........................
EXECUTE IMMEDIATE 'SET TRANSACTION USE ROLLBACK SEGMENT RB2'; OPEN CUR_LAYER;
LOOP
FETCH CUR_LAYER INTO IS_LAYER;
EXIT WHEN CUR_LAYER%NOTFOUND; IS_DETAIL := 'DETAIL_'||IS_LAYER||'L'; ERROR_:='非基板、委外、成型的原物料,制造費用,直接人工計算出錯!'; SQLTXT := 'UPDATE CM_EACH_LAYER_DETAIL A ';
SQLTXT := SQLTXT||' SET A.'||IS_DETAIL||'= ( ';
SQLTXT := SQLTXT||' SELECT SUM(B.TOTAL_USE_AMOUNT) ';
SQLTXT := SQLTXT||' FROM CM_PART_ST_MATERIAL_COST_SAVED B ';
SQLTXT := SQLTXT||' WHERE B.MON_DATE= '''||VAR_MON||''' ';
SQLTXT := SQLTXT||' AND B.ST_ID NOT IN (''RT'') ';
SQLTXT := SQLTXT||' AND B.COST_CODE NOT IN (''JB00'',''WGCOST'') ';
SQLTXT1 := ' AND SUBSTR(B.PART_ID,4,1)='''||IS_LAYER||''' ';
SQLTXT1 := SQLTXT1||' AND B.ST_ID=A.ST_ID ';
SQLTXT1 := SQLTXT1||' AND B.TYPE=A.COST_TYPE ) ';
SQLTXT1 := SQLTXT1||' WHERE A.MON_DATE='''||VAR_MON||''' ';
SQLTXT1 := SQLTXT1||' AND A.ST_ID NOT IN (''JB_CT'',''WG_CT'',''RT'') ';
SQLTXT1 := SQLTXT1||' AND A.COST_TYPE IN (''原物料'',''制造費用'',''直接人工'') '; EXECUTE IMMEDIATE SQLTXT||SQLTXT1; ERROR_:='沖型的原物料,制造費用,直接人工計算出錯!'; SQLTXT := 'UPDATE CM_EACH_LAYER_DETAIL A ';
SQLTXT := SQLTXT||' SET A.'||IS_DETAIL||'= ( ';
SQLTXT := SQLTXT||' SELECT SUM(B.TOTAL_USE_AMOUNT) ';
SQLTXT := SQLTXT||' FROM CM_PART_ST_MATERIAL_COST_SAVED B ';
SQLTXT := SQLTXT||' WHERE B.MON_DATE = '''||VAR_MON||''' ';
SQLTXT := SQLTXT||' AND B.ST_ID = ''RT'' ';
SQLTXT := SQLTXT||' AND B.COST_DES LIKE ''%沖型%'' ';
SQLTXT1 := ' AND SUBSTR(B.PART_ID,4,1)='''||IS_LAYER||''' ';
SQLTXT1 := SQLTXT1||' AND B.TYPE=A.COST_TYPE ) ';
SQLTXT1 := SQLTXT1||' WHERE A.MON_DATE='''||VAR_MON||''' ';
SQLTXT1 := SQLTXT1||' AND A.COST_CENTER = ''A34'' ';
SQLTXT1 := SQLTXT1||' AND A.COST_TYPE IN (''原物料'',''制造費用'',''直接人工'') '; EXECUTE IMMEDIATE SQLTXT||SQLTXT1;
ERROR_:='計算表面處理和成型方式綜合數據出錯'; OPEN CUR_SUR;
LOOP
FETCH CUR_SUR INTO IS_SUR;
EXIT WHEN CUR_SUR%NOTFOUND; --求得去處本身所剩下的表面處理站別
IS_SURFACE := SUBSTR(IS_SUR,1,INSTR(IS_SUR,'+')-1);
ALL_SURFACE := '''HA'''||','||'''EG'''||','||'''GP'''||','||'''SF''' ;
IS_POS := INSTR(ALL_SURFACE,IS_SURFACE);
IS_LEN := LENGTH(ALL_SURFACE);
IS_ST := SUBSTR(ALL_SURFACE,1,IS_POS-1)||SUBSTR(ALL_SURFACE,IS_POS+5,IS_LEN);
IS_ST := SUBSTR(IS_ST,1,IS_LEN-5); --記錄相反的成型方式
SELECT DECODE(SUBSTR(IS_SUR,INSTR(IS_SUR,'+')+1,LENGTH(IS_SUR)),'CUT','成型沖型','成型切型')
INTO IS_FLAG FROM DUAL ; SQLTXT := 'UPDATE CM_EACH_LAYER_DETAIL A SET A.'||IS_DETAIL||' = ( ';
SQLTXT := SQLTXT||' SELECT SUM(B.'||IS_DETAIL||') ';
SQLTXT := SQLTXT||' FROM CM_EACH_LAYER_DETAIL B ';
SQLTXT := SQLTXT||' WHERE B.MON_DATE = '''||VAR_MON||''' ';
SQLTXT := SQLTXT||' AND B.COST_TYPE = ''單位成本'' ';
SQLTXT := SQLTXT||' AND B.DES <> '''||IS_FLAG||''' ';
SQLTXT := SQLTXT||' AND INSTR(B.COST_CENTER,''+'') = 0 ';
SQLTXT := SQLTXT||' AND B.ST_ID NOT IN ('||IS_ST||') ) ';
SQLTXT := SQLTXT||' WHERE A.MON_DATE = '''||VAR_MON||''' ';
SQLTXT := SQLTXT||' AND A.COST_CENTER = '''||IS_SUR||''' '; EXECUTE IMMEDIATE SQLTXT; END LOOP;
CLOSE CUR_SUR; END LOOP;
CLOSE CUR_LAYER;
..............................................
我现在的情况是这样的
在一张报表里,按一定的条件查询出结果,我又要在结果里查询,其中的查询条件是这样的
被查的字段名下拉框里选,操作符也是从下拉框里选,(>,<,=,<>,like),选定二项后,就在文本框里写结果,如 (日期=2005-01-01),日期和=分别是从二个下拉框里选中的,其中日期是报表的一个项.有哪一位兄台有好的方法处理我的第二次查询,申明一点,我第一次查询也是写存储过程的形式实现的,而且存储过程中调用了八个自己写的函数,所以说报表比较复杂!