/*******************************************************************************************************************
-- Title : [MSPy] UnboundLocalError 발생 에러 해결
-- Reference : dbrang
-- Key word : sp_execute_external_script 로컬변수 전역변수 로컬 변수 전역 변수
*******************************************************************************************************************/
■ Script
EXECUTE sp_execute_external_script
@language = N'Python' ,
@script = N'
import pandas # import pandas as ps
df = pandas.DataFrame([1000, 2000, 3000, 4000]) # ps.DataFrame 으로 변경하면 에러 안 남.
print(df)'
■ Error Message
메시지 39004, 수준 16, 상태 20, 줄 114
'sp_execute_external_script'를 실행하는 동안 'Python' 스크립트 오류가 발생했습니다(HRESULT = 0x80004004).
메시지 39019, 수준 16, 상태 2, 줄 114
외부 스크립트 오류가 발생했습니다.
Error in execution. Check the output for more information.
Traceback (most recent call last):
File "<string>", line 5, in <module>
File "C:\PROGRA~1\MICROS~1\MSSQL1~1.MSS\MSSQL\EXTENS~1\MSSQLSERVER01\B5898F34-CF1A-4636-B266-596559BADD97\sqlindb.py", line 24, in transform
OutputDataSet = pandas.DataFrame()
UnboundLocalError: local variable 'pandas' referenced before assignment
SqlSatelliteCall error: Error in execution. Check the output for more information.
외부 스크립트의 STDOUT 메시지:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 406, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 291, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
** 프로시저 내부에서 '전역변수, 로컬변수' 해석이 되면서 에러가 발생하는 듯.
** Library에 Alias를 주니 해결되는데 정확한 원인은 아직 모름.