나는 사용 데이터 분석 도구 및 필요가 있었을 받아들이 값을 사용자에게 전달하는 매개변수에 저장됩니다. 꽤 함 그래서 나는 이것을 쓰
create or replace
procedure complex(datainput in VARCHAR2)
is
begin
insert into dumtab values (datainput);
end complex;
내가 실행되 이에SQL 개발자를 사용하여 다음과 같은 문
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 개발자지만,I got을 수행할 수 없습니다 DML 작업 내에서 쿼리실행시 다음과 같은 코드
select supercomplex('somevalue') from dual;
나의 질문은 -요 문을 실행할 수 있는 언급된 기능SQL 개발자나 -기능을 수행할 수 있는 내가 무엇을 찾고 있는 실행할 수 있는 선택한 문입니다. -가능하지 않은 경우 무'm 묻고 싶은 이유도 알릴 수 있을 내리고 나는 아주 새로운(주처럼 오래?) PL/SQL 그래서 나는 규칙을 인식하지 못하고 구문.
P.S. 내가 원하는 어떻게 이었 C++또는 Java:(
편집
요 기능을 실행하에 SQL 개발자이기 때문에 그것을 실행하기 전에 에 DMine(는 도구입니다)테스트하기 위해서는 유효한 경우 또는하지 않습니다. 아무것도 잘못된 SQL 도에서 잘못된 DMine,하지만 다른 방법이다.
도움을 주셔서 감사합니다,나는 상황을 이해하고 왜 그것이 불법이/권장하지 않음
당신이 사용할 수 있는 지시어pragma autonomous_transaction
. 이 실행되는 기능으로 독립적인 트랜잭션을 수행 할 수 있습니다 DML 올리지 않고 ORA-14551.
다는 것을 알고 있기 때문자율 트랜잭션독립적인 결과의 DML 것이 최선을 다하고의 범위 밖의 부모 트랜잭션이 있습니다. 대부분의 경우하지 않을 것이고 적절한 해결 방법.
SQL> CREATE OR REPLACE FUNCTION supercomplex(datainput IN VARCHAR2)
2 RETURN VARCHAR2 IS
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 INSERT INTO dumtab VALUES (datainput);
6 COMMIT;
7 RETURN 'done';
8 END supercomplex;
9 /
Function created
SQL> SELECT supercomplex('somevalue') FROM dual;
SUPERCOMPLEX('SOMEVALUE')
--------------------------------------------------------------------------------
done
SQL> select * from dumtab;
A
--------------------------------------------------------------------------------
somevalue
톰 카이트좋은 설명이유에 대해 이런 오류가 발생에서 첫 번째 장소입니다. 그것은 안전하지 않기 때문에 따라 달라질 수 있습니다 따라하기 위해서는 행 처리됩니다. 또한,Oracle 지 않't 을 보장하는 함수가 실행될 것 적어도 한 번당 한번 행이 있습니다.
다만 변수를 선언을 받아들이 반환 값은,예를 들어:
declare
retvar varchar2(4);
begin
retvar := supercomplex('somevalue');
end;
선택하지 않't 작업하기 때문에 기능을 수행하는 삽입하는 경우,모든 값을 반환한 다음 그것을 할 수 있습니다.