字符连接 ||不过你的SQL语句是临时拼起来的,不能象你那样直接使用。create or replace procedure temp_cs is v_char varchar2(10); begin v_char:='where username=cs'; --? select * from user_info + v_char; --? end;改为 create or replace procedure temp_cs is v_char varchar2(10); v_sql varchar(100); begin v_char:='where username='''||cs||''''; --我想你的cs应该是输入参数吧, -- 而且username是字符型的 v_sql := ' select * from user_info'|| v_char; --? execute immediate v_sql into ....; end; /
execute immediate v_sql into ....;能给出直接输出和输出至一个变量的写法么?
CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; END pkg_test; /create or replace procedure temp_cs(cs in varchar2,p_rc out pkg_test.myrctype) is v_char varchar2(10); str varchar2(50); begin v_char:='where username='''||cs||''''; str:='select * from user_info '||v_char; open p_rc for str; end; /
谢谢 beckhambobo(beckham)!execute immediate v_sql into ....; 这句能否具体一些?
declare v_a varchar2(20); begin execute immeidate 'select a from table where rownum<2' into v_a; end;
要把所变量定义,然后。。 要清楚知道当前有多少字段execute immediate 'select * from table where....' into 变量1,变理2,....;
谢谢
v_char varchar2(10);
begin
v_char:='where username=cs'; --?
select * from user_info + v_char; --?
end;改为
create or replace procedure temp_cs is
v_char varchar2(10);
v_sql varchar(100);
begin
v_char:='where username='''||cs||''''; --我想你的cs应该是输入参数吧,
-- 而且username是字符型的
v_sql := ' select * from user_info'|| v_char; --?
execute immediate v_sql into ....;
end;
/
AS
TYPE myrctype IS REF CURSOR;
END pkg_test;
/create or replace procedure temp_cs(cs in varchar2,p_rc out pkg_test.myrctype)
is
v_char varchar2(10);
str varchar2(50);
begin
v_char:='where username='''||cs||'''';
str:='select * from user_info '||v_char;
open p_rc for str;
end;
/
这句能否具体一些?
v_a varchar2(20);
begin
execute immeidate 'select a from table where rownum<2' into v_a;
end;
要清楚知道当前有多少字段execute immediate 'select * from table where....' into 变量1,变理2,....;