SyBase - definition μιας stored procedure

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27617
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

SyBase - definition μιας stored procedure

Δημοσίευση από cordis » 19 Απρ 2003 13:18

Μια stored procedure που εμφανίζει το definition μιας ή περισσοτέρων stored procedures που έχουμε στην βάση μας.

Νομίζω ότι χωρίς να έχουμε τον sybase central δεν μπορούμε να κάνουμε κάτι τέτοιο από command line..

Κώδικας: Επιλογή όλων

CREATE PROCEDURE dbo.sp_ddl( 
@name varchar(41), 
@add_drop_procedure smallint 
) 
AS 
/* 
(c) John Sclavos 28/11/2001 

@name = Procedure Name 
@add_drop_procedure = 1 Yes / 0 No 
*/ 
BEGIN 

declare 
@line varchar(255), 
@tmpline varchar(255), 
@lineleft varchar(255), 
@toprint varchar(255), 
@procname varchar(41), 
@tmpname varchar(41), 
@cret char, 
@cindex integer 

select @cret = char(10) 

declare c1 cursor for 
select text, name 
from syscomments, sysobjects 
where sysobjects.id = syscomments.id and sysobjects.name like @name 
order by name, colid 

open c1 

fetch c1 into @line, @procname 

select @tmpline = "", @lineleft = "", @tmpname = "" 

while @@sqlstatus = 0 
begin 

if @tmpname <> @procname 
begin 
if @tmpname <> "" 
begin 
print " " 
print "go" 
print " " 
print "SETUSER" 
print "go" 
print " " 
select @toprint = "grant Execute on " + @tmpname + " to public " 
print @toprint 
print "go" 
print " " 
end 
select @toprint = "print '" + @procname + "'" 
print @toprint 
print "SETUSER 'dbo'" 
print "go" 
print " " 
if @add_drop_procedure = 1 
begin 
print " " 
select @toprint = "drop procedure " + @procname 
print @toprint 
print "go" 
print " " 
end 
select @tmpname = @procname 
end 

select @tmpline = @line 
select @cindex = charindex&#40;@cret, @tmpline&#41; 

while @cindex <> 0 
begin 
select @toprint = rtrim&#40;substring&#40;@tmpline, 1, @cindex&#41;&#41; 

if @lineleft <> "" 
begin 
select @toprint = @lineleft + @toprint 
select @lineleft = "" 
end 

print @toprint 
select @tmpline = stuff&#40;@tmpline, 1, @cindex, null&#41; 
select @cindex = charindex&#40;@cret, @tmpline&#41; 
end 

select @lineleft = @tmpline 

fetch c1 into @line, @procname 
end 

if @tmpname <> "" 
begin 
print " " 
print "go" 
print " " 
print "SETUSER" 
print "go" 
print " " 
select @toprint = "grant Execute on " + @tmpname + " to public " 
print @toprint 
print "go" 
print " " 
end 

close c1 
deallocate cursor c1 

END 
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες