Plsql 如何使用DBMS_SQL从表中进行选择

Plsql 如何使用DBMS_SQL从表中进行选择,plsql,Plsql,我正试图使用dbms_sql包从表中进行选择,但我做不到。。谁能告诉我我做错了什么 create or replace function dbsm_sql_SELECT(age IN NUMBER) return VARCHAR2 is q VARCHAR2(500); ret NUMBER; c1 number; begin q := 'SELECT users_name FROM USERS_TABLE WHERE USERS_AGE = :1'; c1 := d

我正试图使用dbms_sql包从表中进行选择,但我做不到。。谁能告诉我我做错了什么

create or replace function dbsm_sql_SELECT(age IN NUMBER) return VARCHAR2 is



 q VARCHAR2(500);
  ret NUMBER;
  c1 number;

begin
  q := 'SELECT users_name FROM USERS_TABLE WHERE USERS_AGE = :1';

  c1 := dbms_sql.open_cursor;

  dbms_sql.parse(c1,q,dbms_sql.native);
  dbms_sql.bind_variable(c => c1, name => ':1' , value => age );

  ret := dbms_sql.execute(c1);
  dbms_sql.close_cursor(c1);

  dbms_output.put_line(ret);
  return('a');
end dbsm_sql_SELECT;

这里。。试试这个。。我已切换到从公用表进行查询

clear screen
SET serveroutput ON size 1000000

declare
function dbsm_sql_SELECT(age IN NUMBER) return VARCHAR2 is



 q VARCHAR2(500);
  ret NUMBER;
  c1 number;

  l_username VARCHAR2(40);

begin
  q := 'SELECT username FROM user_USERS WHERE user_id < :1';

  c1 := dbms_sql.open_cursor;

  dbms_sql.parse(c1,q,dbms_sql.native);

  DBMS_SQL.DEFINE_COLUMN(c1, 1, l_username,40); 
  --define any other columns you want

  dbms_sql.bind_variable(c => c1, name => ':1' , value => age );


  ret := dbms_sql.execute(c1);

  LOOP 
       IF DBMS_SQL.FETCH_ROWS(c1)>0 THEN 
        DBMS_SQL.COLUMN_VALUE(c1, 1, l_username); 
        --get values of any columns you previously defined

      ELSE 

  -- No more rows to copy: 
        EXIT; 
      END IF; 
  end loop;

  dbms_sql.close_cursor(c1);

  dbms_output.put_line(ret);
  --return teh correct value
  return(l_username);
end ;

begin

dbms_output.put_line(dbsm_sql_SELECT(1000));
end;
/
清除屏幕
将serveroutput设置为大小1000000
声明
函数dbsm_sql_SELECT(数字年龄)返回VARCHAR2为
q VARCHAR2(500);
ret数;
c1数;
l_用户名VARCHAR2(40);
开始
q:='从用户id<:1'的用户中选择用户名';
c1:=dbms_sql.open_游标;
parse(c1,q,dbms_sql.native);
DBMS_SQL.DEFINE_列(c1,1,l_用户名,40);
--定义所需的任何其他列
dbms_sql.bind_变量(c=>c1,name=>1',value=>age);
ret:=dbms_sql.execute(c1);
环
如果DBMS_SQL.FETCH_ROWS(c1)>0,那么
DBMS_SQL.COLUMN_值(c1,1,l_用户名);
--获取以前定义的任何列的值
其他的
--没有更多要复制的行:
出口
如果结束;
端环;
dbms_sql.close_游标(c1);
dbms_output.put_line(ret);
--返回正确的值
返回(l_用户名);
结束;
开始
dbms_output.put_line(dbsm_sql_SELECT(1000));
结束;
/

Check-您缺少一些调用,如FETCH\u ROWS、COLUMN\u VALUE。我需要一些基本示例来理解这个概念,而不是高级。。对于初学者来说,docs.oracle几乎毫无意义。。谢谢