다음 PL/SQL을 작성하여 동적으로 주어진 공식을 문자열로 실행합니다. 수식의 최종 출력은 o_
변수에 반환 될 것으로 기대했던 19
을 반환해야합니다.동적 PL/SQL 블록을 실행하여 합계를 실행하고 값을 반환하십시오.
실제로 코드는 오류없이 실행되지만 예상 한 결과를 제공하지 않습니다. DBMS_SQL
패키지를 올바르게 사용하고 있습니까?
이 문제를 복잡하게 만드는 요인은 입력 문자열 (또는 수식)에 몇 개의 바인드 변수가 포함되는지 알 수 없다는 점입니다. 따라서 EXECUTE IMMEDIATE
은 바인딩이 필요한 변수의 수를 미리 알고 있기 때문에 EXECUTE IMMEDIATE
동적 PL/SQL 실행 전략을 사용할 수 없습니다.
올바른 방법으로 문제에 접근하고 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?
DECLARE
cur_ INTEGER;
r_ NUMBER;
str_ VARCHAR2(2000) := 'BEGIN :out := :x * 3 + :y; END;';
x_ NUMBER := 3;
y_ NUMBER := 10;
o_ NUMBER;
BEGIN
cur_ := Dbms_SQL.open_cursor;
Dbms_SQL.Parse (cur_, str_, Dbms_SQL.Native);
Dbms_SQL.Bind_Variable (cur_, ':out', o_);
Dbms_SQL.Bind_Variable (cur_, ':x', x_);
Dbms_SQL.Bind_Variable (cur_, ':y', y_);
r_ := Dbms_SQL.Execute (cur_);
Dbms_SQL.Close_Cursor (cur_);
Dbms_Output.Put_Line ('Your variables: ' || x_ || ', ' || y_ || ', and out: ' || o_ || ', and R: ' || r_);
END;
문자열이 고정 된 문자열입니까? 그렇지 않다면 [이 질문] (http://stackoverflow.com/questions/5209981/use-of-bind-variable)의 답변에있는 것과 같은 것을 사용할 수 있습니다. – Nitish
@Nitish 당신이 뭘 말하고 있는지 잘 모르겠습니다. 나는 그 페이지에서 내가 묻고있는 질문에 가까울만한 것을 찾을 수 없다. – cartbeforehorse