declare
type t_cur is ref cursor;
c_sign_stat t_cur;
strSQL VARCHAR2(100);
namemp varchar2(100):='ALLEN';
tmp_sql varchar2(100):='deptno=''10'' and ename='||namemp||' or JOB=''SALESMAN''';rec_gd_sign_in_tab emp%rowtype;begin
strSQL:='SELECT * FROM emp WHERE sal IS NOT NULl and ' || tmp_sql;
open c_sign_stat for strSQL;
loop
fetch c_sign_stat into rec_gd_sign_in_tab ;
exit when c_sign_stat %notfound;
/*写要取游标中的一条一条数据的代码*/
dbms_output.put_line(rec_gd_sign_in_tab.empno);
end loop;
close c_sign_stat;
end;为什么老是报 标识符无效的错误,到底怎么拼接成字符串啊。特别是打几个单引号,比如:变量,常量的时候,混用的时候。
type t_cur is ref cursor;
c_sign_stat t_cur;
strSQL VARCHAR2(100);
namemp varchar2(100):='ALLEN';
--tmp_sql varchar2(100):='deptno=''10'' and ename='||namemp||' or JOB=''SALESMAN'''
--上面是你的 就是在namemp这里少了两个引号,这样你的语句就是ename=ALLEN,而不是ename='ALLEN'
--建议你如果不清楚你的拼接语句,你可以用dbms_output.put_line()打印出来
tmp_sql varchar2(100):='deptno=''10'' and ename='''||namemp||''' or JOB=''SALESMAN''';
rec_gd_sign_in_tab emp%rowtype;
begin
strSQL:='SELECT * FROM emp WHERE sal IS NOT NULl and ' || tmp_sql;
open c_sign_stat for strSQL;
loop
fetch c_sign_stat into rec_gd_sign_in_tab ;
exit when c_sign_stat %notfound;
/*写要取游标中的一条一条数据的代码*/
dbms_output.put_line(rec_gd_sign_in_tab.empno);
end loop;
close c_sign_stat;
end;
declare
type t_cur is ref cursor;
c_sign_stat t_cur;
strSQL VARCHAR2(100);
namemp varchar2(100):='ALLEN';
tmp_sql varchar2(100):='deptno=''10'' and ename='''||namemp||''' or JOB=''SALESMAN'''; --这里ename字串拼接错了,要加单引号rec_gd_sign_in_tab emp%rowtype;begin
strSQL:='SELECT * FROM emp WHERE sal IS NOT NULl and ' || tmp_sql;
open c_sign_stat for strSQL;
loop
fetch c_sign_stat into rec_gd_sign_in_tab ;
exit when c_sign_stat %notfound;
/*写要取游标中的一条一条数据的代码*/
dbms_output.put_line(rec_gd_sign_in_tab.empno);
end loop;
close c_sign_stat;
end; PL/SQL block, executed in 0.078 sec.
7499
7521
7654
7844
7955
Total execution time 0.094 sec.
type t_cur is ref cursor;
c_sign_stat t_cur;
strSQL VARCHAR2(100);
namemp varchar2(100):='ALLEN';
v_deptno varchar2(10) := '10';
v_jobno varchar2(20) := 'SALESMAN';
tmp_sql varchar2(100):='deptno=:dn and ename=:en or JOB=:jb';rec_gd_sign_in_tab emp%rowtype;begin
strSQL:='SELECT * FROM emp WHERE sal IS NOT NULl and ' || tmp_sql;
open c_sign_stat for strSQL using v_deptno,namemp,v_jobno;
loop
fetch c_sign_stat into rec_gd_sign_in_tab ;
exit when c_sign_stat %notfound;
/*写要取游标中的一条一条数据的代码*/
dbms_output.put_line(rec_gd_sign_in_tab.empno);
end loop;
close c_sign_stat;
end;
tmp_sql varchar2(100):='deptno=''10'' and ename='||namemp||' or JOB=''SALESMAN''';改成tmp_sql varchar2(100):='deptno=''10'' and ename='''||namemp||''' or JOB=''SALESMAN''';
namemp varchar2(100):='ALLEN'; 这个拼接进去的是allen
动态的要多了软分析的时间
如果我参数很多,而且有很多重复的,怎么处理啊。 对应着一个一个传 很麻烦啊。能不能用参数指代?
随便举个例子 using dn:=v_deptno,en:=namemp,v_jobno;