SnowPro Advanced: Data Engineer — Question 70

The following stored procedure has been created to load orders for a single date into a target table:

create or replace procedure uspLoadOrdersByDate ()
returns string
language javascript
execute as owner
as
'
sqlCmd = `INSERT INTO ORDERS_BY_DATE_TGT SELECT * FROM ORDERS_BY_DATE WHERE O_ORDERDATE = $dateToProcess`; sqlStmt = snowflake.createStatement({sqlText: sqlCmd}); res = sqlStmt.execute(); res.next(); return res.GetColumnValue(1);
';

Upon executing the following statements, the following error is returned:

set dateToProcess = '2020-08-02';
call uspLoadOrdersByDate();

Execution error in store procedure USPLOADORDERSBYDATE: Use of session variable '$DATETOPROCESS' is not allowed in owners rights stored procedure At Statement.execute, line 4 position 14

Making what changes will allow the procedure to execute successfully? (Choose two.)

Answer options

Correct answer: A, D

Explanation

Option A is correct because changing to EXECUTE AS CALLER allows the procedure to access session variables without permission issues. Option D is also correct as it avoids using session variables entirely by passing the date as an input parameter. The other options either do not resolve the permission issue or introduce unnecessary complexity.