我通过 CHATGPT 生成了此代码,以便更好地理解 Oracle SQL 中的绑定变量:
DECLARE
v_employee_id NUMBER := 1001;
v_employee_name VARCHAR2(50);
v_salary NUMBER;
BEGIN
-- SQL statement with bind variables
SELECT employee_name, salary
INTO v_employee_name, v_salary
FROM employees
WHERE employee_id = v_employee_id;
-- Output the results
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee not found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;
/
我使用的其他资源声称需要在名称之前使用冒号来将某些内容指定为绑定变量。我意识到 CHATGPT 的准确度仅此而已。我是否需要在这段代码中的变量之前添加冒号以将它们指定为绑定变量?
这还取决于您使用的技术。例如,在 ADODB 和 ODBC 中,您使用问号
?
(没有变量名称)来指示准备好的语句中的绑定变量。 MySQL 也使用问号 ?
,而在 SQL-Server 中则使用 @
所以,你必须根据文档进行查阅。对于 Oracle,大多数情况下需要冒号
:
。
在代码中,您使用 PL/SQL 变量,就好像它是绑定变量一样,在这种情况下,您不需要在 PL/SQL 变量前添加冒号
:
,因为该变量是本地定义的。
绑定变量从正在执行的语句外部的源获取输入,Oracle 希望它们被命名并以冒号为前缀
:
。
某些 Oracle 驱动程序(包括 JDBC、ODBC)允许匿名(未命名、位置)绑定由单个问号标识的变量
?
。
我需要在这段代码中的变量前面加上冒号来将它们指定为绑定变量吗?
从技术上来说,是的。如果您想使用外部定义的绑定变量而不是本地定义的 PL/SQL 变量,那么您需要在绑定变量前添加
:
前缀。
实际上,您的代码没有使用(外部)绑定变量,而是使用本地 PL/SQL 变量,并且要继续使用您定义的变量,不需要更改代码。