程序可以将用户运行时输入作为参数吗?

时间:2015-04-14 14:36:47

标签: oracle plsql oracle11g oracle-sqldeveloper sqlplus

我对plsql很新,我认为这是一个相当基本的问题。

我已经创建了以下过程,它可以完美地运行:

CREATE or REPLACE PROCEDURE proc_list_similar_recipes(idr_p IN recipe.idr%TYPE)

AS
  idr_row recipe%ROWTYPE;
  v_similarity NUMBER;
  v_title VARCHAR2(200);

BEGIN  
  FOR idr_row IN (SELECT * FROM recipe ORDER BY idr) LOOP
    SELECT recipetitle
    INTO v_title
    from RECIPE
    WHERE IDR = idr_p;
    v_similarity := func_similarity(idr_p, idr_row.idr);
    DBMS_OUTPUT.PUT_LINE('Similarity between ' || v_title || 'idR(' || idr_p || ') and '|| idr_row.recipetitle || '(idR' || idr_row.idr || '): ' || v_similarity);
    END LOOP;
END proc_list_similar_recipes;

要测试它/从中获取输出我正在制作简单的匿名块,如下所示:

SET SERVEROUPUT ON
SET VERIFY OFF
ACCEPT prompt_idr PROMPT 'Please enter a valid id'
DECLARE
  prompt_idr number :=&prompt_idr;
BEGIN
  proc_list_similar_recipes(prompt_idr);

END;
/

但是问题的规范说明我的程序应该“提示用户输入值”?是否可以在没有额外匿名阻止的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

  

但是问题的规范说明我的程序应该“提示用户输入值”?

事实是PL / SQL不是交互式的。

如果您的要求严格来自用户提示接受值,则 PL / SQL 不是一个好的解决方案PL / SQL代码已编译并存储在数据库中,因此不是交互式

此外,& 用于SQL*Plus中的变量替换,将SQL * Plus作为用户界面提供给用户输入值不是一个好/可行的想法

我强烈建议您使用前端应用来满足此类要求。 PL / SQL不是交互式的,在这里不合适。 SQL * Plus作为界面将成为用户的噩梦。