mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			MySQL
		
	
	
	
	
	
| CREATE OR REPLACE PROCEDURE who_called_me
 | |
| ( owner      OUT VARCHAR2,
 | |
|   name       OUT VARCHAR2,
 | |
|   lineno     OUT NUMBER,
 | |
|   caller_t   OUT VARCHAR2 ,
 | |
|   depth          NUMBER DEFAULT 1
 | |
| )
 | |
| AUTHID DEFINER
 | |
| AS
 | |
| --depth based version of who_called_me from asktom
 | |
|    call_stack  VARCHAR2(4096) default dbms_utility.format_call_stack;
 | |
|    n           NUMBER;
 | |
|    found_stack BOOLEAN DEFAULT FALSE;
 | |
|    line        VARCHAR2(255);
 | |
|    cnt         NUMBER := 0;
 | |
| BEGIN
 | |
|    LOOP
 | |
|        n := instr( call_stack, chr(10) );
 | |
|        exit when ( n is NULL or n = 0 );
 | |
| --
 | |
|        line := substr( call_stack, 1, n-1 );
 | |
|        call_stack := substr( call_stack, n+1 );
 | |
| --
 | |
|        if ( NOT found_stack ) then
 | |
|            if ( line like '%handle%number%name%' ) then
 | |
|                found_stack := TRUE;
 | |
|            end if;
 | |
|        else
 | |
|            cnt := cnt + 1;
 | |
|            -- cnt = 1 is ME
 | |
|            -- cnt = 2 is MY Caller
 | |
|            -- cnt = 3 is Their Caller
 | |
|            if ( cnt = (2+depth) ) then
 | |
|                lineno := to_number(substr( line, 13, 8 ));
 | |
|                line   := substr( line, 23 ); --set to rest of line .. change from 21 to 23
 | |
|                if ( line like 'pr%' ) then
 | |
|                    n := length( 'procedure ' );
 | |
|                elsif ( line like 'fun%' ) then
 | |
|                    n := length( 'function ' );
 | |
|                elsif ( line like 'package body%' ) then
 | |
|                    n := length( 'package body ' );
 | |
|                elsif ( line like 'pack%' ) then
 | |
|                    n := length( 'package ' );
 | |
|                elsif ( line like 'anonymous%' ) then
 | |
|                    n := length( 'anonymous block ' );
 | |
|                else
 | |
|                    n := null;
 | |
|                end if;
 | |
|                if ( n is not null ) then
 | |
|                   caller_t := ltrim(rtrim(upper(substr( line, 1, n-1 ))));
 | |
|                else
 | |
|                   caller_t := 'TRIGGER';
 | |
|                end if;
 | |
| 
 | |
|                line := substr( line, nvl(n,1) );
 | |
|                n := instr( line, '.' );
 | |
|                owner := ltrim(rtrim(substr( line, 1, n-1 )));
 | |
|                name  := LTRIM(RTRIM(SUBSTR( LINE, N+1 )));
 | |
|                exit;
 | |
|            END IF;
 | |
|        END IF;
 | |
|    END LOOP;
 | |
| END;
 | |
| /
 | |
| 
 |