Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

如何使用boto3在lambda调用具有动态参数的redshift存储过程?

0

【以下的问题经过翻译处理】 我有一个lambda函数需要调用redshift中的存储过程,其中一个参数的值在运行时未知。我在调用中缩小了代码范围:

response = rs_client.execute_statement(
            ClusterIdentifier='my_cluster_name',
            Database='my_db_name',
            DbUser='my_user'',
            Sql='call my_schema.this_is_my_proc()',
            Parameters=[{'name': 'in_param', 'value': 'this is the parameter'}],
            StatementName='Test of SP call'
        )

上述代码可以在凭据正常的情况下(我已将其匿名化),也可以在没有参数和在Sql参数中硬编码参数的情况下运行,即Sql=call my_schema.this_is_my_proc('this is hardcoded'),因此问题不在此处。我还尝试了将参数传递为格式化字符串的方式:

param = 'this is the parameter'
stmnt = f'call my_schema.this_is_my_proc({param})',


我从lambda函数测试执行中得到的异常是: An error occurred (ValidationException) when calling the ExecuteStatement operation: Parameters list contains unused parameters. Unused parameters: [in_param]

是否可以从lambda函数调用具有参数的Redshift存储过程?

TIA

profile picture
EXPERTE
gefragt vor einem Jahr28 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 你好, 如文档中所述(https://docs.aws.amazon.com/redshift/latest/mgmt/data-api.html),参数应该以:parameter的格式在sql语句中进行输入。

根据文档,你的代码应该长这样:


response = rs_client.execute_statement(
            ClusterIdentifier='my_cluster_name',
            Database='my_db_name',
            DbUser='my_user'',
            Sql='call my_schema.this_is_my_proc(:in_param)',
            Parameters=[{'name': 'in_param', 'value': '此为参数'}],
            StatementName='测试存储过程调用'
        )


希望这可以帮到你

profile picture
EXPERTE
beantwortet vor einem Jahr

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen