一个查询中的 node-oracledb 多个语句
Posted
技术标签:
【中文标题】一个查询中的 node-oracledb 多个语句【英文标题】:node-oracledb multiple statement in one query 【发布时间】:2021-12-19 00:03:35 【问题描述】:在 mysql 中,我们可以在一个查询中执行多个语句,如下例所示。 oracledb有没有类似的方法在一个查询中运行多条语句?
const mysql = require('mysql');
const connection = mysql.createConnection(
host: 'localhost',
user: 'root',
password: 'password',
multipleStatements: true
)
app.get('/distinct',(req,res)=>
connection.query('select DISTINCT country FROM sample_data.olympic_winners order by country ASC; select DISTINCT sport FROM sample_data.olympic_winners order by sport ASC',(err,rows)=>
if(!err)
res.send(rows);
else
console.log(err);
)
);
【问题讨论】:
【参考方案1】:Oracle 一次只允许您执行一条 SQL 或 PL/SQL 语句。
您可以将查询包装在 PL/SQL 块中并使用 Oracle 的隐式结果集,请参阅 doc:
例如:
const plsql = `
DECLARE
c1 SYS_REFCURSOR;
c2 SYS_REFCURSOR;
BEGIN
OPEN c1 FOR SELECT city, postal_code
FROM locations
WHERE location_id < 1200;
DBMS_SQL.RETURN_RESULT(c1);
OPEN C2 FOR SELECT job_id, employee_id, last_name
FROM employees
WHERE employee_id < 103;
DBMS_SQL.RETURN_RESULT(c2);
END;`;
result = await connection.execute(plsql);
console.log(result.implicitResults);
将显示:
[
[
[ 'Roma', '00989' ],
[ 'Venice', '10934' ],
],
[
[ 'AD_PRES', 100, 'King' ],
[ 'AD_VP', 101, 'Kochhar' ],
[ 'AD_VP', 102, 'De Haan' ],
]
]
【讨论】:
【参考方案2】:另一种方法是在不调用 PL/SQL 的情况下将数据库端的查询合并到单个 select 语句中:
select DISTINCT 'country', country FROM sample_data.olympic_winners
UNION ALL
select DISTINCT 'sport', sport FROM sample_data.olympic_winners
order by 1,2 ASC;
此方法需要相关表的相同行结构并提供复合结果集。这取决于使用这种复合请求要实现的目标是什么,例如所需的结果集结构(只是一个简单的统一列表,或者更确切地说是分层的主从细节)。
【讨论】:
以上是关于一个查询中的 node-oracledb 多个语句的主要内容,如果未能解决你的问题,请参考以下文章