2016-06-01 6 views
0

ich für eine Abfrage/proceduer bin auf der Suche, die alle geben mir die dependecies eines Verfahrens (Ergebnisse ähnlich wie sp_depends)Eine Abfrage/Prozedur erhalten Prozedur dependecies sybase

Beispiel in Verfahren proc1, es auszuführen proc2, proc3, in Prozedur proc2, führen sie es xproc1, xproc2

so möchte ich meine Ausgabe wie

proc1 -> proc2 -> xproc1 ->xproc2 
proc1 -> proc3 

EDIT sein:

Ich habe das folgende Verfahren erstellt, aber das Problem über sie gab es mir die folgenden Fehler

------------------------ Execute ------------------------ 
Maximum stored procedure nesting level exceeded (limit 60). Please use sp_configure to increase the 'max nesting level'. 
return status = -6 

Auch die nach nach der Zählung auf dem Cursor zu begrenzen (Wenn Ihre Lese carefuly das Verfahren, werden Sie Zeigezahl, so dass ich änderte die Prozedur später, um anzugeben, wie viele Verschachtelungen ich habe, um den Fehler zu vermeiden, und ich vermied es) das Ergebnis fehlt, ich habe nicht die ganze Prozedurabhängigkeit bekommen, was ich sage, ich bekomme nicht alle Prozedurabhängigkeiten, aber ich habe Probleme mit dem Verfahren nach der Untersuchung und Überprüfung in syscomments und Auswahl in Abhängigkeit sysdepends scheint es Sybase doenst geben alle die Abhängigkeit. Ich weiß es nicht. Hast du einen Weg, der mir helfen kann, alle Abhängigkeiten zu bekommen?

CREATE TABLE dbo.PROC_HIERARCHY 
(PROC_PATH VARCHAR(4000) NULL 
) 
GO 

CREATE PROCEDURE dbo.PROC_DEP_REC 
    @PROC_ID  INTEGER, 
    @PATH   VARCHAR(4000) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @CURR_ID  INTEGER 
    DECLARE @CURR_NAME  VARCHAR(40) 
    DECLARE @ROW_COUNT  NUMERIC(12) 
    DECLARE @PATH_OUT  VARCHAR(4000) 

    -- retrieve the children 
    DECLARE CURS CURSOR FOR 
    select distinct o2.name, o2.id 
    from sysdepends d 
     inner join sysobjects o 
     on d.id = o.id 
     inner join sysobjects o2 
     on d.depid = o2.id 
    where o.type = 'P' 
     and o2.type = 'P' 
     and o.id = @PROC_ID 

    OPEN CURS 
    FETCH CURS INTO @CURR_NAME, @CURR_ID 

    WHILE (@@SQLSTATUS <> 2) 
    BEGIN 
     SELECT @PATH_OUT = @PATH + @CURR_NAME + '/' 

     select @ROW_COUNT = COUNT(1) 
     from sysdepends d 
      inner join sysobjects o 
      on d.id = o.id 
      inner join sysobjects o2 
      on d.depid = o2.id 
     where o.type = 'P' 
      and o2.type = 'P' 
      and o.id = @CURR_ID 

     IF (@ROW_COUNT > 0) 
      EXEC PROC_DEP_REC @CURR_ID, @PATH_OUT OUTPUT 
     ELSE 
      BEGIN 
       IF (RIGHT(@PATH_OUT, 1) = '/') 
        SELECT @PATH_OUT = LEFT(@PATH_OUT, LEN(@PATH_OUT) - 1) 

       INSERT INTO PROC_HIERARCHY VALUES (@PATH_OUT) 
      END 

     FETCH CURS INTO @CURR_NAME, @CURR_ID 
    END 

    CLOSE CURS 
    DEALLOCATE CURS 

    IF (RIGHT(@PATH_OUT, 1) = '/') 
     SELECT @PATH = SUBSTRING(@PATH_OUT, 1, LEN(@PATH_OUT) - CHARINDEX('/', REVERSE(@PATH_OUT))) 
END 

GO 

CREATE PROCEDURE dbo.PROC_DEP 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @CURR_ID  INTEGER 
    DECLARE @CURR_NAME  VARCHAR(40) 
    DECLARE @PATH   VARCHAR(4000) 

    DECLARE CURS CURSOR FOR 
    select distinct o.name, o.id 
    from sysdepends d 
     inner join sysobjects o 
     on d.id = o.id 
     inner join sysobjects o2 
     on d.depid = o2.id 
    where o.type = 'P' 
     and o2.type = 'P' 

    OPEN CURS 
    FETCH CURS INTO @CURR_NAME, @CURR_ID 

    WHILE (@@SQLSTATUS <> 2) 
    BEGIN 
     SELECT @PATH = @CURR_NAME + '/' 
     EXEC PROC_DEP_REC @CURR_ID, @PATH OUTPUT 

     FETCH CURS INTO @CURR_NAME, @CURR_ID 
    END 

    CLOSE CURS 
    DEALLOCATE CURS 

    SELECT DISTINCT * 
    FROM PROC_HIERARCHY 
    ORDER BY PROC_PATH 

END 
GO 

Antwort

1

Was ist mit den Abfragen in sp_depends selbst? Wechseln Sie in das Verzeichnis $ SYBASE/ASE-X_Y/scripts und suchen Sie die installmaster-Datei (oder instmstr auf Windows) und suchen Sie nach sp_depends. Dann müssen Sie die Ausgabe nur etwas anders formatieren, zum Beispiel indem Sie eine Cursorschleife über das Endergebnis setzen.

+0

danke für Ihr asnwer, bitte überprüfen Sie meine Bearbeitung – Moudiz

+0

durch die Art und Weise konnte ich Skriptverzeichnis finden 'C: \ sybase \ ASE-15_0' – Moudiz

+0

Das bedeutet wahrscheinlich, dass Ihr Installationsverzeichnis woanders ist. Es muss nicht c: \ sybase sein. Unter Windows wird dies durch% SYBASE% angezeigt – RobV