在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);
})
});发布于 2021-11-05 01:04:04
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' ],
]
]发布于 2021-11-09 17:46:16
另一种方法是在不调用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;这种方法要求所涉及的表具有相同的行结构,并提供复合结果集。这取决于使用这种复合请求要实现的目标是什么,比如结果集所需的结构(只是一个简单的统一列表,或者更确切地说是分层的master-detail)。
https://stackoverflow.com/questions/69844668
复制相似问题