在一个存储过程里,如果把一些特定的处理,像PL/SQL里一样,写成内置的存储过程可以吗?该如何写?SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO-- =============================================
-- Author:      Fsolsh)Andy
-- Create date: 2007/09/30
-- =============================================
ALTER PROCEDURE [dbo].[FPN02B00]
AS
-----------------------BEGIIN-----------------------
PROCEDURE PROCE1
AS
BEGIN
SELECT 
        @KANA_NAME1 = ISNULL(KN_KANA1,'here') , 
        @KANA_NAME1 = ISNULL(KN_KANA2,'here') 
FROM 
        DBO.M_X010 
WHERE 
        CD_KEY = @KB_KEY_054 
        AND KB_KEY = @KB_BANK_HURIKOMI
END
-----------------------END-----------------------
BEGIN
    DO SOMETHING
END
GOSET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
如上所示是整个存储过程的结构,PROCEDURE [dbo].[FPN02B00]的程序体忽略,PROCEDURE PROCE1这一块该怎么写?

解决方案 »

  1.   

    T-SQL里PROCEDURE不可以嵌套吗?也就是说如下的结构是非法的?只能把原本逻辑上内嵌的PROCEDURE单独写成一个PROCEDURE,然后在这个PROCEDURE里边调用吗?
    ALTER PROCEDURE [dbo].[FPN02B00]
    AS
    --------------------------------
    DECLARE PROCE1 PROCEDURE
    AS
    BEGIN
    END
    --------------------------------
    BEGIN
    END
      

  2.   

    小弟刚接触T-SQL,在做PROCEDURE,现在一边学习一边做,进展挺慢的,请各位指点一下,不吝赐教,谢谢!
      

  3.   

    方法1:单独创建存储过程PROCE1,@KANA_NAME1和@KANA_NAME2为输出参数,@KB_KEY_054和@KB_BANK_HURIKOMI为输入参数。存储过程FPN02B00内部再调用PROCE1。方法2:
    将PROCE1的功能,直接在FPN02B00内部写。
      

  4.   

    谢谢Limpire(昨夜小楼)的解决方案。
    问题1:打算内嵌的这个存储过程只在一个特定的存储过程中使用,擅自增加开发文件是不符合开发规约的,所以没有采用Limpire兄的方案1。
    为题2:打算内嵌的存储过程是在一个循环里重复使用的,因此想把它抽象出来,独立成为一个存储过程,这样也可以提高运行的效率,所以没有采用Limpire兄的方案2。
    难道T-SQL里不可以在一个存储过程内部嵌套一个存储过程吗?oracle里是可以的啊。
      

  5.   

    谢谢!得到Limpire兄的这些回答,对我已经可以解决问题啦。再次感谢大家的帮助,谢谢!