sqlplus
var cur refcursor
exec test1(:cur);
print cur;
--行转列
with temp as(
select '小明' username, '语文' course , 98 score from dual union all
select '小明' username, '数学' course , 88 score from dual union all
select '小明' username, '英语' course , 77 score from dual union all
select '刚豆' username, '语文' course , 99 score from dual union all
select '刚豆' username, '数学' course , 96 score from dual union all
select '刚豆' username, '英语' course , 100 score from dual
)
select t.username,
sum(decode(t.course, '语文', score, null)) as CHINESE,
sum(decode(t.course, '数学', score, null)) as MATH,
sum(decode(t.course, '英语', score, null)) as ENGLISH
from temp t
group by t.username
--表变量使用
declare
type my_tab is table of base_fi2_busiunit%rowtype
index by binary_integer;
new_tab my_tab;
begin
select * bulk collect into new_tab from base_fi2_busiunit;
for i in 1..new_tab.count loop
dbms_output.put_line(new_tab(i).f_dwmc);
end loop;
end;
--带游标存储过程调用
declare v_a int; p_c sys_refcursor;
begin
P_QS_YDKH('2014', '10', 22, p_c);
end;
wm_concat(column)函数
把列值以","号分隔起来,并显示成一行
中文乱码:wm_concat(to_char(....))
示例:按ID分组合并name
SQL> select id,wm_concat(name) name from test group by id;
SQL> select 'create or replace view as select '|| wm_concat(column_name) || ' from dept'from user_tab_columns where table_name='DEPT';
--c#获取游标
private void fenye()
{
OracleConnection conn = new OracleConnection("Data Source=FI2;User ID=SKYFI2;Password=Skyadmin123;Unicode=True");
conn.Open();
try
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
//调用存储过程查询数据
cmd.CommandText = "P_DTQS";
OracleParameter[] parameters = new OracleParameter[1];
parameters[0] = new OracleParameter("rcursor", OracleType.Cursor);
parameters[0].Direction = ParameterDirection.Output;
foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
//执行命令
OracleDataAdapter oda = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
oda.Fill(ds);
}
catch (Exception ex)
{
throw;
}
finally
{
conn.Close();
}
}