各位大侠好:
本人一个小问题处理不了,请求支援:
一个sql的存储过程怎么转化为ORACLE的存储过程呢;
下边是sql的
GSP_DEP_VALUEMAPPINGSET--存储过程名称
DEPVMTARCOLVALUE--表名
CREATE PROC GSP_DEP_VALUEMAPPINGSET
@VMID VARCHAR (36)
AS
BEGIN
DECLARE @SQL VARCHAR(8000)
SET @SQL = 'SELECT TARGETID ,DEPVMTARCOLVALUE.VALUE'
SELECT @SQL = @SQL + ' , MAX(CASE COLUMNID WHEN ''' + COLUMNID + ''' THEN SOUCECOLVALUE END) [' + COLUMNID + ']'
FROM (SELECT DISTINCT COLUMNID FROM VW_DEP_DEPVMCOLVALUE WHERE VMID=@VMID) AS A
SET @SQL = @SQL + ' FROM VW_DEP_DEPVMCOLVALUE
LEFT JOIN DEPVMTARCOLVALUE ON TARGETID=DEPVMTARCOLVALUE.ID WHERE VW_DEP_DEPVMCOLVALUE.VMID='''+@VMID+'''
GROUP BY TARGETID,DEPVMTARCOLVALUE.VALUE'
EXEC(@SQL)
END
GO下边是我做的ORACLE的:
CREATE or REPLACE procedure
GSP_DEP_VALUEMAPPINGSET
(VMID VARCHAR (36) )
AS
BEGIN
SQL VARCHAR(8000)
SQL := 'SELECT TARGETID ,DEPVMTARCOLVALUE.VALUE'
SQL := SQL || ' , MAX(CASE COLUMNID WHEN ''' || COLUMNID || ''' THEN SOUCECOLVALUE END) [' || COLUMNID || ']'
FROM (SELECT DISTINCT COLUMNID FROM VW_DEP_DEPVMCOLVALUE WHERE VMID=VMID) AS A
SQL := SQL || ' FROM VW_DEP_DEPVMCOLVALUE
LEFT JOIN DEPVMTARCOLVALUE ON TARGETID=DEPVMTARCOLVALUE.ID WHERE VW_DEP_DEPVMCOLVALUE.VMID='''||VMID||'''
GROUP BY TARGETID,DEPVMTARCOLVALUE.VALUE'
EXEC(SQL)
END
/可以不对,但是不知道那地方不正确在程序中执行的时候报
ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须声明标识符 'GSP_DEP.VALUEMAPPINGSET'ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored
不知道什么原因;
谢谢
本人一个小问题处理不了,请求支援:
一个sql的存储过程怎么转化为ORACLE的存储过程呢;
下边是sql的
GSP_DEP_VALUEMAPPINGSET--存储过程名称
DEPVMTARCOLVALUE--表名
CREATE PROC GSP_DEP_VALUEMAPPINGSET
@VMID VARCHAR (36)
AS
BEGIN
DECLARE @SQL VARCHAR(8000)
SET @SQL = 'SELECT TARGETID ,DEPVMTARCOLVALUE.VALUE'
SELECT @SQL = @SQL + ' , MAX(CASE COLUMNID WHEN ''' + COLUMNID + ''' THEN SOUCECOLVALUE END) [' + COLUMNID + ']'
FROM (SELECT DISTINCT COLUMNID FROM VW_DEP_DEPVMCOLVALUE WHERE VMID=@VMID) AS A
SET @SQL = @SQL + ' FROM VW_DEP_DEPVMCOLVALUE
LEFT JOIN DEPVMTARCOLVALUE ON TARGETID=DEPVMTARCOLVALUE.ID WHERE VW_DEP_DEPVMCOLVALUE.VMID='''+@VMID+'''
GROUP BY TARGETID,DEPVMTARCOLVALUE.VALUE'
EXEC(@SQL)
END
GO下边是我做的ORACLE的:
CREATE or REPLACE procedure
GSP_DEP_VALUEMAPPINGSET
(VMID VARCHAR (36) )
AS
BEGIN
SQL VARCHAR(8000)
SQL := 'SELECT TARGETID ,DEPVMTARCOLVALUE.VALUE'
SQL := SQL || ' , MAX(CASE COLUMNID WHEN ''' || COLUMNID || ''' THEN SOUCECOLVALUE END) [' || COLUMNID || ']'
FROM (SELECT DISTINCT COLUMNID FROM VW_DEP_DEPVMCOLVALUE WHERE VMID=VMID) AS A
SQL := SQL || ' FROM VW_DEP_DEPVMCOLVALUE
LEFT JOIN DEPVMTARCOLVALUE ON TARGETID=DEPVMTARCOLVALUE.ID WHERE VW_DEP_DEPVMCOLVALUE.VMID='''||VMID||'''
GROUP BY TARGETID,DEPVMTARCOLVALUE.VALUE'
EXEC(SQL)
END
/可以不对,但是不知道那地方不正确在程序中执行的时候报
ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须声明标识符 'GSP_DEP.VALUEMAPPINGSET'ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored
不知道什么原因;
谢谢
CREATE or REPLACE procedure GSP_DEP_VALUEMAPPINGSET
is
VMID VARCHAR(36);
begin
VMID:='aaa';
dbms_output.put_line(VMID);
end;
/
你可参考下这个存储过程, 改下格式 应该就没问题了(注意每行之间的分号 一定要写的)。lz过程中用到了表,我这不便调试!
CREATE or REPLACE procedure GSP_DEP_VALUEMAPPINGSET(VMID IN VARCHAR2(36)) AS
sql_text VARCHAR2(8000);
BEGIN
sql_text := 'SELECT TARGETID ,DEPVMTARCOLVALUE.VALUE ,';
sql_text := sql_text ||
'MAX(CASE COLUMNID WHEN COLUMNID THEN SOUCECOLVALUE END COLUMNID ';
sql_text := 'FROM (SELECT DISTINCT COLUMNID FROM VM_DEP_DEPVMCOLVALUE WHERE VMID=' || VMID;
sql_text := ' FROM VW_DEP_DEPVMCOLVALUE LEFT JOIN DEPVMTARCOLVALUE ON TARGETID=DEPVMTARCOLVALUE.ID ';
sql_text := 'WHERE VW_DEP_DEPVMCOLVALUE.VMID=' || VMID;
sql_text := ' GROUP BY TARGETID,DEPVMTARCOLVALUE.VALUE';
EXECUTE IMMEDIATE sql_text;
END