我对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;
/
但是问题的规范说明我的程序应该“提示用户输入值”?是否可以在没有额外匿名阻止的情况下执行此操作?
答案 0 :(得分:1)
但是问题的规范说明我的程序应该“提示用户输入值”?
事实是PL / SQL不是交互式的。
如果您的要求严格来自用户的提示和接受值,则 PL / SQL 不是一个好的解决方案PL / SQL代码已编译并存储在数据库中,因此不是交互式。
此外,& 用于SQL*Plus
中的变量替换,将SQL * Plus作为用户界面提供给用户输入值不是一个好/可行的想法
我强烈建议您使用前端应用来满足此类要求。 PL / SQL不是交互式的,在这里不合适。 SQL * Plus作为界面将成为用户的噩梦。