【发布时间】:2012-02-02 11:51:51
【问题描述】:
我正在使用数据分析工具,我的要求是接受用户的值,将其作为参数传递并将其存储在表中。非常直截了当,所以我坐下来写这篇文章
create or replace
procedure complex(datainput in VARCHAR2)
is
begin
insert into dumtab values (datainput);
end complex;
我使用以下语句在 SQL Developer 中执行了此操作
begin
complex('SomeValue');
end;
它工作正常,值被插入到表中。但是,数据分析工具不支持上述语句,所以我求助于使用函数。下面是函数的代码,它可以编译。
create or replace
function supercomplex(datainput in VARCHAR2)
return varchar2
is
begin
insert into dumtab values (datainput);
return 'done';
end supercomplex;
我再次尝试在 SQL Developer 中执行它,但是在执行以下代码时,我得到 cannot perform a DML operation inside a query
select supercomplex('somevalue') from dual;
我的问题是 - 我需要一个可以在 SQL Developer 中运行上述函数的语句,或者 - 一个可以执行我正在寻找的功能,可以通过 select 语句执行。 - 如果无法按照我的要求做,我想要一个理由,以便我可以通知我的经理,因为我对 PL/SQL 很陌生(比如一周大?)所以我不了解规则和语法。
附:我多么希望这是 C++ 甚至 Java :(
编辑
我需要在 SQL Developer 上运行该函数,因为在 DMine(这是该工具)中运行它之前,以测试它是否有效。 SQL 中的任何无效内容在 Dmine 中也是无效的,但反之则不然。
感谢您的帮助,我了解情况以及为什么它是非法/不推荐的
【问题讨论】:
-
您得到的错误不是 SQL Developer 特定的,它是一个 Oracle 错误,而且非常简单:您不能在查询中对数据库进行修改。大概这是由于隔离级别,以保持 ACID 合规性;否则你可以同时修改你正在查询的表,所有的地狱都会崩溃!
-
您能解释一下为什么需要在 SQL Developer 中调用函数吗?为什么这很重要?
-
数据分析工具不支持?什么工具?如果您可以在此工具中运行 SQL,您应该能够运行脚本(您最初显示的匿名块)。
标签: sql oracle function stored-procedures plsql