如何在 Borneo SQL 查询中正确声明和使用变量?

问题描述 投票:0回答:1

我目前正在使用 Python 中的 Borneo SDK 对 Oracle NoSQL 数据库执行 SQL 查询。我在尝试在 SQL 语句中声明和使用变量时遇到了问题。具体来说,我遇到了与变量声明相关的语法错误。

这是我的代码的简化版本:

import logging
from borneo import PrepareRequest, QueryRequest

# Set up logging
logging.getLogger().info("Starting the query execution")

# SQL statement with variable declarations
statement = '''
DECLARE $mailaddress STRING;
DECLARE $nickname STRING;
SELECT * FROM users WHERE mailaddress = $mailaddress AND nickname = $nickname
'''

logging.getLogger().info("Preparing the statement")
prequest = PrepareRequest().set_statement(statement)
logging.getLogger().info("Prepared the statement request")

try:
    # Prepare the statement
    presult = handle.prepare(prequest)
    logging.getLogger().info("Statement prepared")

    # Get the prepared statement
    pstatement = presult.get_prepared_statement()
    logging.getLogger().info("Got the prepared statement")

    # Set variables
    pstatement.set_variable('$mailaddress', mailaddress)
    pstatement.set_variable('$nickname', nickname)
    logging.getLogger().info("Set variables for the prepared statement")

    # Execute the query
    qrequest = QueryRequest().set_prepared_statement(pstatement)
    qiresult = handle.query_iterable(qrequest)

    # Process the results
    userId = ""
    for row in qiresult:
        logging.getLogger().info(row)
        userId = row["userId"]
        break

except Exception as e:
    logging.getLogger().error("Error occurred: %s", str(e))

# Check for results
if not qiresult:
    logging.getLogger().info("No results found or query execution failed")

当我运行此代码时,遇到以下错误:

PREPARE: Illegal Argument: Error: at (3, 16) missing '(' at '$nickname', at line 3:16
rule stack: [parse, statement, index_function_path, func_call]

我尝试了不同的变体,包括将变量声明组合到单个 DECLARE 语句中,但我不断遇到语法错误。以下是我尝试过的一些变化:

在一行中声明多个变量:

DECLARE $mailaddress STRING, $nickname STRING;
SELECT * FROM users WHERE mailaddress = $mailaddress AND nickname = $nickname

尽管进行了这些尝试,我仍然面临错误。

我的问题是:

在 Borneo SQL 查询中声明和使用变量的正确方法是什么? 在 Borneo 中使用变量是否有任何特定的语法规则或最佳实践? 任何帮助或指导将不胜感激!

oracle-cloud-infrastructure
1个回答
0
投票

我自己已经解决了这个问题。这就是我所做的:

statement = '''
DECLARE $mailaddress STRING;
$nickname STRING;
SELECT * FROM users WHERE mailaddress = $mailaddress AND nickname = $nickname
'''

感谢您的建议和帮助。

© www.soinside.com 2019 - 2024. All rights reserved.