当前位置: 代码迷 >> Oracle开发 >> 求高手写一存储过程或匿名块解决思路
  详细解决方案

求高手写一存储过程或匿名块解决思路

热度:108   发布时间:2016-04-24 07:41:06.0
求高手写一存储过程或匿名块
create or replace package pkg_content
 as
  Type cur_content is ref cursor;
  procedure getContent
  (parm_rec out cur_content);
 end pkg_content;



 create or replace package body pkg_content
 as
  procedure getContent
  (parm_rec out cur_content)
  as
  begin
  open parm_rec
  for
  select subject,username,createtime,lastanswertime,hitcount
  from content;
  end getContent;
 end pkg_content;

本人刚学习PL/SQL,请高手写一匿名块,调用上面软件包中的存储过程,将游标中的数据打印出来.谢谢!

------解决方案--------------------
在sqlplus中依次输入如下命令:
set serveroutput on;
var c refcursor;
exec pkg_content.getContent(:c);
print c;
------解决方案--------------------
收藏的一个例子:

SQL code
--tom写的print_table--将一个查询的结果 记录by记录 地列出来create or replace procedure print_table( p_query in varchar2 )AUTHID CURRENT_USERisl_theCursor integer default dbms_sql.open_cursor;l_columnValue varchar2(4000);l_status integer;l_descTbl dbms_sql.desc_tab;l_colCnt number;beginexecute immediate'alter session setnls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );for i in 1 .. l_colCnt loopdbms_sql.define_column(l_theCursor, i, l_columnValue, 4000);end loop;l_status := dbms_sql.execute(l_theCursor);while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loopfor i in 1 .. l_colCnt loopdbms_sql.column_value( l_theCursor, i, l_columnValue );dbms_output.put_line( rpad( l_descTbl(i).col_name, 30 )|| ': ' ||l_columnValue );end loop;dbms_output.put_line( '-----------------' );end loop;execute immediate'alter session set nls_date_format=''dd-MON-rr'' ';exceptionwhen others thenexecute immediate'alter session set nls_date_format=''dd-MON-rr'' ';raise;end;/
------解决方案--------------------
SQL code
create or replace package pkg_employees as  Type cur_employees is ref cursor;  procedure getemployees  (parm_rec out cur_employees); end pkg_employees; create or replace package body pkg_employees as  procedure getemployees  (parm_rec out cur_employees)  as  begin  open parm_rec  for  select employee_id,last_name,salary  from employees  where salary > 10000  order by salary desc;  end getemployees; end pkg_employees;declare  p_cursor pkg_employees.cur_employees;  eid EMPLOYEES.EMPLOYEE_ID%type;  elastname EMPLOYEES.LAST_NAME%type;  esalary EMPLOYEES.SALARY%type;begin   pkg_employees.getemployees(p_cursor);  loop    fetch p_cursor into eid,elastname,esalary;    exit when p_cursor%notfound;    dbms_output.put_line(eid || '|' || elastname || '|' || esalary);  end loop;end;
  相关解决方案