我目前正在使用 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 中使用变量是否有任何特定的语法规则或最佳实践? 任何帮助或指导将不胜感激!
我自己已经解决了这个问题。这就是我所做的:
statement = '''
DECLARE $mailaddress STRING;
$nickname STRING;
SELECT * FROM users WHERE mailaddress = $mailaddress AND nickname = $nickname
'''
感谢您的建议和帮助。