oracle 当字段为 “null"时,Fetch into 到变量后,变量是空字符串还是NULL?
时间: 2024-03-03 12:52:07 浏览: 72
在使用 Oracle 数据库时,如果 fetch into 命令从查询结果中取出的值为 null,那么对应的变量值就会被赋为 null,而不是空字符串。这个行为是 Oracle 数据库的默认行为。
例如,假设表 my_table 中的 name 字段值为 null,那么以下代码执行后,变量 my_name 的值就会变为 null:
```
DECLARE
my_name VARCHAR2(50);
BEGIN
SELECT name INTO my_name FROM my_table WHERE id = 1;
DBMS_OUTPUT.PUT_LINE('my_name: ' || my_name); -- 输出 "my_name: "
END;
```
如果你希望在 fetch into 命令中,将 null 值赋为空字符串而不是 null,你可以使用 NVL 函数来实现,例如:
```
DECLARE
my_name VARCHAR2(50);
BEGIN
SELECT NVL(name, '') INTO my_name FROM my_table WHERE id = 1;
DBMS_OUTPUT.PUT_LINE('my_name: ' || my_name); -- 输出 "my_name: "
END;
```
这样,即使 name 字段的值为 null,my_name 变量的值也会被赋为空字符串。
相关问题
C++的程序,oracle 当字段为 “null"时,Fetch into 到变量后,变量是空字符串还是NULL?
在使用 C++ 语言通过 Oracle 数据库访问查询结果集时,如果 fetch into 命令从查询结果中取出的值为 null,那么对应的变量值就会被赋为 null 而不是空字符串。
例如,假设通过 Oracle 数据库连接对象 conn,已经创建了一个查询语句对象 stmt,查询结果集中包含一个名为 "name" 的字段,值为 null,那么以下代码执行后,变量 my_name 的值就会被赋为 null:
```c++
OCIStmt* stmt;
OCIDefine *defnp;
char my_name[50];
int my_name_ind = 0;
OCIStmtPrepare(stmt, conn, (OraText *) "SELECT name FROM my_table WHERE id = 1", (ub4) strlen("SELECT name FROM my_table WHERE id = 1"), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIDefineByPos(stmt, &defnp, errhp, (ub4) 1, (dvoid *) my_name, (sb4) sizeof(my_name), SQLT_STR, (dvoid *) &my_name_ind, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT);
OCIStmtExecute(svchp, stmt, errhp, (ub4) 1, (ub4) 0, (OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
if (my_name_ind == -1) {
// my_name 的值为 null
}
```
在这个例子中,my_name_ind 是一个用来存储 my_name 变量是否为 null 的指示器变量。如果 my_name 的值为 null,则 my_name_ind 的值为 -1,否则 my_name_ind 的值为 0。
阅读全文