程序可以将用户 运行 时间输入作为参数吗?
Can procedures take user run-time input as parameters?
我是 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;
为了测试它的 it/get 输出,我正在制作简单的匿名块,如下所示:
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;
/
但是问题的说明说明我的程序应该"prompt the user for an value"?是否可以在没有额外匿名块的情况下执行此操作?
But the specification of the problem states that my procedure should "prompt the user for an value"?
事实是PL/SQL不是交互式的。
如果您的要求严格提示并且接受来自用户的值,那么PL/SQL 不是一个好的解决方案。 PL/SQL 代码是 编译的 并存储在 数据库 中,因此它 不是交互式的 .
此外,&用于SQL*Plus
中的变量替换,提供SQL*Plus并不是good/feasible的想法作为用户输入值的用户界面。
我强烈推荐前端 应用程序 来满足这种需求。 PL/SQL 没有交互性,不适合放在这里。 SQL*Plus 作为界面对用户来说将是一场噩梦。
我是 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;
为了测试它的 it/get 输出,我正在制作简单的匿名块,如下所示:
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;
/
但是问题的说明说明我的程序应该"prompt the user for an value"?是否可以在没有额外匿名块的情况下执行此操作?
But the specification of the problem states that my procedure should "prompt the user for an value"?
事实是PL/SQL不是交互式的。
如果您的要求严格提示并且接受来自用户的值,那么PL/SQL 不是一个好的解决方案。 PL/SQL 代码是 编译的 并存储在 数据库 中,因此它 不是交互式的 .
此外,&用于SQL*Plus
中的变量替换,提供SQL*Plus并不是good/feasible的想法作为用户输入值的用户界面。
我强烈推荐前端 应用程序 来满足这种需求。 PL/SQL 没有交互性,不适合放在这里。 SQL*Plus 作为界面对用户来说将是一场噩梦。