首页 > Linux操作系统 > Linux操作系统 > 报表输出公用的一个简单DEMO
做了一个简单的动态输出报表的程序,只要传入table名称或者一段SQL语句。当然如果要做一个实用的报表输出平台还有许多地方得设定,这只是一个简单的DEMO:
Create Or Replace Procedure Cuxexport_Demo(p_Table In Varchar2) Is
--p_Table table name or dynamic SQL
v_Sql Varchar2(2000);
v_Cursorid Number;
v_Cursorret Number;
v_Value Varchar2(20);
v_Cnt Number;
v_Text Varchar2(150);
l_Desctbl Dbms_Sql.Desc_Tab;
-- l_colcnt NUMBER;
Begin
--判断p_Table参数是否有效
--raise_application_error(-20001,"Warning:Argument Invalid");
-- v_Sql := 'select account_date,file_name from ' || p_Table;
v_Sql := 'select * from ' || p_Table;
v_Cursorid := Dbms_Sql.Open_Cursor;
Dbms_Sql.Parse(v_Cursorid, v_Sql, Dbms_Sql.Native);
Dbms_Sql.Describe_Columns(v_Cursorid, v_Cnt, l_Desctbl);
/*v_Cnt := p_Count;
If v_Cnt = 0 Then
Select Count('X')
Into v_Cnt
From All_Tab_Columns
Where Table_Name = Upper(p_Table);
End If;*/
If v_Cnt > 0 Then
For i In 1 .. v_Cnt Loop
Dbms_Sql.Define_Column(v_Cursorid, i, v_Value, 15);
End Loop;
v_Cursorret := Dbms_Sql.Execute(v_Cursorid);
For i In 1 .. v_Cnt Loop
v_Text := v_Text || l_Desctbl(i).Col_Name || '|';
End Loop;
Dbms_Output.Put_Line(v_Text);
Loop
If Dbms_Sql.Fetch_Rows(v_Cursorid) = 0 Then
Dbms_Sql.Close_Cursor(v_Cursorid);
Exit;
End If;
v_Text := ' ';
For i In 1 .. v_Cnt Loop
Dbms_Sql.Column_Value(v_Cursorid, i, v_Value);
v_Text := v_Text || Rtrim(v_Value) || '|';
End Loop;
Dbms_Output.Put_Line(v_Text);
End Loop;
End If;
End Cuxexport_Demo;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/77580/viewspace-212828/ ,如需转载,请注明出处,否则将追究法律责任。