Я создал хранимую процедуру ниже в sql-developer:
CREATE OR REPLACE PROCEDURE CREATE_USER(
t_username IN VARCHAR2,
t_password IN VARCHAR2,
t_default_table IN VARCHAR2,
t_quota IN VARCHAR2
)
IS
m_statement VARCHAR2(1300);
m_username VARCHAR2(30) := t_username;
m_password VARCHAR2(30) := t_password;
m_default_table VARCHAR2(30) := t_default_table;
m_quota VARCHAR2(30) := t_quota;
BEGIN
m_statement := 'create user ' || t_username || ' identified by ' || t_password;
IF m_default_table != 'NULL' THEN
m_statement := m_statement || ' DEFAULT TABLESPACE ' || m_default_table;
END IF;
IF m_quota != '0' AND m_default_table != 'NULL' THEN
m_statement := m_statement || ' QUOTA ' || m_quota || 'M ON ' || m_default_table;
END IF;
EXECUTE IMMEDIATE (m_statement);
END;
И это скомпилировано без ошибок. Я также подключился к оракулу. Затем я получил пользовательские данные (req.body) следующим образом:
{ username: 'a', password: 'a', tablespace: 'NULL', quota: '0' }
Но когда я выполняю запрос процедуры «вызов»:
oracle.getConnection(
{
uuser : "AN",
password: "AN123",
connectString: "localhost:1521/orcl"
},
(t_err, t_connection) => {
if(t_err){
console.error(t_err);
return;
}
t_connection.execute(
`BEGIN
createUser(:username, :password, :tablespace, :quota);
END;`,
{
username: req.body.username,
password: req.body.password,
tablespace: req.body.tablespace,
quota: req.body.quota,
},
(t_er, t_reslt) => {
if(t_er){
console.error(t_er);
return;
}
Я получил:
[Error: DPI-1059: bind variables are not supported in DDL statements] {
errorNum: 0,
offset: 0
}
Я пробовал много способов исправить процедуру или код nodejs, но это не сработало. Я очень новичок в этой теме. Кто-нибудь может мне помочь?
username: { type: oracledb.STRING, dir: oracle_db.BIND_IN}
. Кроме того, я бы упростил пример, например, сначала создал таблицу с жестко заданным именем, процедуру без каких-либо параметров, затем добавил параметр для имени таблицы и медленно продвигался к вашему примеру. Также проверьте использование разных имен переменных, возможно, одно из них является зарезервированным ключевым словом. - person wolφi   schedule 05.04.2021quota: req.body.quota,
? - person wolφi   schedule 05.04.2021