0

在 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);  
      
})  
});
4

2 回答 2

1

Oracle 一次只允许您执行一条 SQL 或 PL/SQL 语句。

您可以将查询包装在 PL/SQL 块中并使用 Oracle 的隐式结果集,请参阅文档

例如:

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-05T01:04:03.560 回答
0

另一种方法是在不调用 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;

这种方法需要相关表的相同行结构并提供复合结果集。这取决于使用这种复合请求要实现的目标是什么,例如所需的结果集结构(只是一个简单的统一列表,或者更确切地说是分层的主细节)。

于 2021-11-09T17:46:16.213 回答