Search code examples
c#teradatateradata-sql-assistant

How to execute stored procedure in TeraData


I have created a stored procedure in Teradata - SQL Assistant

But, I'm not able to execute it. It has 5 parameters and I only need to pass 3 parameters as an input.

REPLACE PROCEDURE proc_store_import
(
IN P1_PROC_TYPE VARCHAR(20),
IN P2_zone_name VARCHAR(20),
IN P3_Location_code INT,
IN P4_RolloutDate VARCHAR(20),
IN P5_Phase INT
)

BEGIN
    declare O1_InsertStatus VARCHAR(250);
    IF P1_PROC_TYPE = 'ADD-STORE' THEN   
        IF( ( SELECT Count(*)   FROM dim_location WHERE location_code = P3_Location_code) >0 ) THEN     
            SET O1_InsertStatus =  'Requested Store is already a  Store...!!!';
        ELSE    
            INSERT INTO  dim_location
            (location_code, location_name, store_zone, region, area, opening_date, closing_date, isactive, dc_code,
            city,dc_city,location_type,catchment,emailid,circle,business_zone,cluster_name,store_cluster,ofine_code,
            region,new_date,rollout_Phase,createdDate,createdBy)

            SELECT  location_code, store_name, zone_name, region, area, opening_date, closing_date, isactive, dc_code,
            city,dc_city,location_type,catchment,emailid,circle,business_zone,cluster_name,store_cluster,ofine_code,
            region,P4_RolloutDate AS new_date,P5_Phase AS rollout_Phase,CURRENT_DATE AS createdDate,1 AS createdBy
            FROM    dim_location
             WHERE location_code = P3_Location_code; 

            SET O1_InsertStatus =  'Store included to  Store...!!!';
        END IF;
    END IF;
END;

Solution

  • Simply pass NULLs for the missing parameters:

    CALL proc_store_import( 'foo', 'bar', 42 , NULL ,NULL)
    

    You could also wrap it in a macro (with optional DEFAULTs) and then you can use named parameters:

    REPLACE MACRO mac_store_import
     (
       P1_PROC_TYPE VARCHAR(20),
       P2_zone_name VARCHAR(20),
       P3_Location_code INT,
       P4_RolloutDate VARCHAR(20),
       -- P4_RolloutDate VARCHAR(20) DEFAULT '',
       P5_Phase INT
     ) 
    AS 
    (
      CALL proc_store_import( 
         :P1_PROC_TYPE, 
         :P2_zone_name,
         :P3_Location_code,
         :P4_RolloutDate,
         :P5_Phase);
    );
    
    EXEC mac_store_import 
     ( P1_PROC_TYPE = 'foo',
       P3_Location_code = 42,
       P2_zone_name = 'bar'
     );
    

    Btw, your current SQL could be written directly as a macro, too.