遇到的问题: 在一个typebody中,
v_sql varchar2(200):=null;
v_typtpdo is table of all_tab_columns.column_name%type; for i in 1..v_typtpdo.count loop
v_sql:=v_sql||v_typtpdo(i)||'=self.'||trim(v_typtpdo(i))||',';
end loop;
varstr:='update '||v_tablename||' set '||substr(v_sql,1,length(v_sql)-1)||' where me_id='||self.ME_ID;
dbms_output.put_line(varstr);
输出varstr:
update JL_PDO_SL
set JLID = self.JLID,
DICKE = self.DICKE,
BREITE = self.BREITE,
FLAGCOMPLETE = self.FLAGCOMPLETE,
LAENGE = self.LAENGE
where me_id = 146
现在,我的问题是:如何执行varstr
execute immediate varstr;---会报错:无效字符;
而我将sql语句:
update JL_PDO_SL
set JLID = self.JLID,
DICKE = self.DICKE,
BREITE = self.BREITE,
FLAGCOMPLETE = self.FLAGCOMPLETE,
LAENGE = self.LAENGE
where me_id = 146;
放到typebody 中,执行正常。
版主或高人,请给赐教:如何执行varstr;
v_sql varchar2(200):=null;
v_typtpdo is table of all_tab_columns.column_name%type; for i in 1..v_typtpdo.count loop
v_sql:=v_sql||v_typtpdo(i)||'=self.'||trim(v_typtpdo(i))||',';
end loop;
varstr:='update '||v_tablename||' set '||substr(v_sql,1,length(v_sql)-1)||' where me_id='||self.ME_ID;
dbms_output.put_line(varstr);
输出varstr:
update JL_PDO_SL
set JLID = self.JLID,
DICKE = self.DICKE,
BREITE = self.BREITE,
FLAGCOMPLETE = self.FLAGCOMPLETE,
LAENGE = self.LAENGE
where me_id = 146
现在,我的问题是:如何执行varstr
execute immediate varstr;---会报错:无效字符;
而我将sql语句:
update JL_PDO_SL
set JLID = self.JLID,
DICKE = self.DICKE,
BREITE = self.BREITE,
FLAGCOMPLETE = self.FLAGCOMPLETE,
LAENGE = self.LAENGE
where me_id = 146;
放到typebody 中,执行正常。
版主或高人,请给赐教:如何执行varstr;
解决方案 »
- SQL SERVER 链接 oracle 问题 急!
- date(+)=to_date('20090805','yyyymmdd')
- 令人百思不得其解的动态SQL问题
- [急求]oracle analytic workspace manager 10.1.0.4的下载
- oracle开发问题,Oracle高手请进
- 求推荐学习proc c/c++的书籍
- 请问索引组织表+ 分区表的方式,如何创建、建立索引,帮助优化。谢谢
- 请问在Oracle中如何实现Case when then 中存放表结果?
- sql表中单列数据复制问题
- 一个很菜的总是:Oracle9i如何做数据库备份?
- oracle数据汇总
- orcl 10G大数据量导入的问题
update JL_PDO_SL
set
DIAGONALE = self.DIAGONALE,
INNENDM = self.INNENDM,
OUTPUTEVENTID = self.OUTPUTEVENTID
where me_id = 146;
end;';
将varstr值,直接放进去,仍报错:PL/SQL: ORA-00904: "SELF"."OUTPUTEVENTID": 标识符无效
EXECUTE IMMEDIATE 'update '||tbl|| ' set col1= '|| 参数值 || ' where ... ';
varstr:='update '||v_tablename||'self set '||substr(v_sql,1,length(v_sql)-1)||' where me_id='||self.ME_ID;
另外,语句结尾的分号,不要写成全角的分号!
execute immediate varstr;
我的问题,没有说清楚,再次梳理:
原本的设计思路:
1、多张DB表jl_pdo_xxx(字段大部分一样,个别不同),对应一个type(该type的属性包含了多种表的所有字段)
2、type属性的值由GUI,赋值;
3、根据一个字段,可判断出具体那张表eg:jl_pdo_sl;
4、可从 ALL_TAB_COLUMNS表中,得出该jl_pdo_sl的所有字段
5、然后,拼写出varstr
v_sql varchar2(200):=null;
v_typtpdo is table of all_tab_columns.column_name%type;
v_typtpdo :=function_get_columnname(tablename varchar2); for i in 1..v_typtpdo.count loop
v_sql:=v_sql||v_typtpdo(i)||'=self.'||trim(v_typtpdo(i))||',';
end loop;
varstr:='update '||v_tablename||' set '||substr(v_sql,1,length(v_sql)-1)||' where me_id='||self.ME_ID;
6、问题出现: 如何执行 varstr???
你本来是想用self.xxxxx(xxxxx代表每个字段的属性名?);
你用DBMS_OUTPUT.PUT_LINE(self.'||trim(v_typtpdo(i))||')把值书出来看一下,看看这个值能打印出来吗?
v_sql:=v_sql||v_typtpdo(i)||'=self.'||trim(v_typtpdo(i))||',';
dbms_output.put_line(self.v_typtpdo(i)); --报错:Compilation errors for TYPE BODY
Error: PLS-00302: 必须声明 'V_TYPTPDO' 组件
end loop;
varstr:='update '||v_tablename||' set '||substr(v_sql,1,length(v_sql)-1)||' where me_id='||self.ME_ID||';';
编译不过去,