一、如何使一个结果集显示为1行?
例如:
结果集如下:ID
1
2
3
使用一条SQL语句显示为1,2,3 二、如何用存储过程返回一个结果集?三、存储过程中的SQL命令包含根据参数变化的变量(如参数为1则取和,参数为2则取总数),应该如何写?
例如:
参数为@FLAG,在SQL中这么写
IF @FLAG=1
@NN='SUM(COST)'
ELSE IF @FLAG=2
@NN='COUNT(*)'
执行的SQL语句为
EXEC('SELECT '+@NN + ' FROM AAA')
例如:
结果集如下:ID
1
2
3
使用一条SQL语句显示为1,2,3 二、如何用存储过程返回一个结果集?三、存储过程中的SQL命令包含根据参数变化的变量(如参数为1则取和,参数为2则取总数),应该如何写?
例如:
参数为@FLAG,在SQL中这么写
IF @FLAG=1
@NN='SUM(COST)'
ELSE IF @FLAG=2
@NN='COUNT(*)'
执行的SQL语句为
EXEC('SELECT '+@NN + ' FROM AAA')
解决方案 »
- 表中纵向资料向横向资料转换
- ORA-01861: 文字与格式字符串不匹配
- [安装]Oracle10.2在Red Hat Enterprise Linux4 Update4 上的详细安装步骤
- insert语句问题
- 菜鸟请教一个问题,关于数据库和双机软件安装顺序的
- ERROR:ORA-12514: TNS:listener does not currently know of service requested in connect
- 怎样查询表T1 的f1日期字段为本周所有日期值所有记录?
- 一个统计查询的问题
- 讨论:oracle解析sql where子句的顺序。
- to:: luckysxn(风花雪) and zhangshunshi(宇轩)
- SQL SERVER按时间 查询问题?
- SQL Server与Oracle的函数区别
二,自己用手抓住
三,人工智能就好了
----------------------------
一,参考下面的
WITH A AS (
SELECT 1123 ID,'2008-9-19' DAY,'9:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'19:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'13:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'12:7:47' TIME FROM DUAL )
select ID,DAY,WMSYS.WM_CONCAT(TIME) TIME FROM A GROUP BY ID,DAY
/ ID DAY TIME ---------- --------- ------------------------------------------------------------
1123 2008-9-19 12:7:47,13:7:47,19:7:47,9:7:4710G及以上的版本可以這樣寫第二中方法SQL codeWITH A AS (
SELECT 1123 ID,'2008-9-19' DAY,'9:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'19:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'13:7:47' TIME FROM DUAL UNION
SELECT 1123 ID,'2008-9-19' DAY,'12:7:47' TIME FROM DUAL )
select ID,DAY,MAX(SYS_CONNECT_BY_PATH(TIME,',')) TIME FROM
(SELECT ID,DAY,TIME,ROW_NUMBER()OVER(PARTITION BY ID,DAY ORDER BY ID ) RN FROM A)
START WITH RN=1
CONNECT BY RN-1=PRIOR RN
GROUP BY ID,DAY
/
二,返回游标就可以了,这只是一种方法。
三,你写的大意是对的。不过你写的sql server的语法,就这问题
第一个问题,数据库是8i的,能不能请你详细解释一下?
第二个问题,返回游标,请问如何定义?
第三个问题,变量直接加上SQL语句就可以了吗?
:=.(@%;
符号 ":=" 被替换为 "VARCHAR2" 后继续。
行:4
文本:ss varchar2;错误:PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
;
<an identifier><a double-quoted delimited-identifier>delete
existsprior<a single-quoted SQL string>
符号 ";" 被替换为 "end-of-file" 后继续。
行:9
文本:end请问以上两个错误是什么意思?存储过程中变量如何定义?
你改的话会出很多问题,除非写的全部正确,你不需要修改的
一,
WITH A AS (
SELECT 1 Id FROM DUAL UNION
SELECT 2 Id FROM DUAL UNION
SELECT 3 Id FROM DUAL )
Select substr(MAX(SYS_CONNECT_BY_PATH(id,',')),2) TIME FROM
(Select id,ROW_NUMBER()OVER( ORDER BY ID ) RN FROM A)
START WITH RN=1
CONNECT BY RN-1=PRIOR RN
三,
create or replace function test1(FLAG in Int)
RETURN varchar2 is
Result varchar2(30);
NN varchar2(30);
BeginIF FLAG=1 then NN:='SUM(COST)';
ELSIF FLAG=2 then NN:='COUNT(*)';
End If;
--执行的SQL语句为
execute immediate 'SELECT '||NN||' into Result FROM AAA' ;
Return Result;
End test1;
create or replace package sp_test
is
type ResultData is ref cursor;
procedure getRecordSet(rst out ResultData);
end sp_test;create or replace package body sp_test
is procedure getRecordSet(rst out ResultData) is
begin
open rst for select sysdate from daul;
end;
end;
procedure sp_test(Flag int,rst out ResultData) is
NN varchar2(100);
begin
if flag=1 then
NN='sum(cost)';
else
NN='Count(*)';
end if;
open rst for SELECT '+NN+' FROM AAA;
end;
第3题应该是这样,sqlserver里的+在oracle里用||
procedure sp_test(Flag int,rst out ResultData) is
NN varchar2(100);
Sql varchar2(1000);
begin
if flag=1 then
NN='sum(cost)';
else
NN='Count(*)';
end if;
Sql:='SELECT '||NN||' FROM AAA';
open rst for sql;
end;