为什么select语句在oracle中执行时不向我显示表?
我是oracle的新手。我已经有了一个表为什么select语句在oracle中执行时不向我显示表?,oracle,oracle11g,Oracle,Oracle11g,我是oracle的新手。我已经有了一个表tempash。 因此,我创建了一个过程来查看这个表的数据。 因此,我创建了以下过程: create or replace procedure offc.temp_sel(data1 varchar2) is var1 varchar2(4000); BEGIN var1:='select * from offc.temp'||data1; EXECUTE IMMEDIATE var1; end; 所以,我执行了这个声明,但它没有向我显
tempash
。
因此,我创建了一个过程来查看这个表的数据。
因此,我创建了以下过程:
create or replace procedure offc.temp_sel(data1 varchar2) is
var1 varchar2(4000);
BEGIN
var1:='select * from offc.temp'||data1;
EXECUTE IMMEDIATE var1;
end;
所以,我执行了这个声明,但它没有向我显示任何东西
exec offc.temp_sel('ash');
我的过程中没有任何编译错误。但是为什么select语句不向我显示该过程的数据?尝试添加out参数:
create or replace procedure offc.temp_sel(data1 varchar2,result out sys_refcursor)
is
BEGIN
open result for 'select * from offc.temp'||data1;
end;
SQL> var rc refcursor
SQL> execute offc.temp_sel('ash',:rc)
PL/SQL procedure successfully completed.
SQL> print rc
您需要将SELECT语句的结果保存到变量中。执行SELECT*..时,应将结果放入记录类型,但由于结果集包含多行,因此变量需要是记录表 为了不容易出错,记录表需要与表源结构完全相同
CREATE OR REPLACE PROCEDURE OFFC.TEMP_SEL(DATA1 VARCHAR2) IS
VAR1 VARCHAR2(4000);
TYPE T_RESULT IS TABLE OF offc.temp%ROWTYPE;
-- defined the new type based on the structure of table TEMP from schema OFFC
v_result t_result;
-- define a variable of that type.
BEGIN
var1:='select * from offc.temp'||data1;
EXECUTE IMMEDIATE VAR1 BULK COLLECT INTO V_RESULT;
-- collect he result into the new variable
FOR I IN 1 ..v_result.count
LOOP
dbms_output.put_line(v_result(i).<<column_name from temp offc.table>>);
end loop;
-- loop through the variable(table of records) and display its content.
-- you need to replace the << ... >> with the name of your column from source tabel that you want to display.
end;
最好的,
Mikcutu要查看表格数据,通常使用
SELECT
语句。你试过了吗select*from offc.tempASH
@KarkiAshwin程序不会输出任何内容,除非您对其进行编码executeimmediate
不会对select
语句执行任何操作,除非它们附带into
子句。也许您正在寻找这样的结果:看起来您的过程接受了两个参数,但您只传递了一个。是的,我的错,我忘记了第一个参数,更新了答案。您的结果ref游标似乎没有在过程中被引用。非常感谢。。有人贬低了你。。我刚刚投了赞成票
set serveroutput on;
execute temp_sel( 'ash');