说我有一张桌子:
CONVERT(varchar,theNVarcharColumn)
我想编写一个包含两个参数的过程:
create table product
(
prod_code number(3),
prod_name varchar2(20),
prod_dept varchar2(20)
);
该过程需要检查列是否存在,如果存在,则返回值等于param_1 = col_name
param_2 = col_value
的行。
示例:
假设程序名称为param_2
,并且传递的参数如下:
执行getproddetails
当我传递这两个值时,它应该返回整个行getproddetails('prod_id', 40)
。
我可以查看列是否存在天气,但是如何根据值返回整行?
任何帮助都会很棒。我编写了以下代码,但它不起作用:
prod_id=40
请注意,我只显示了2列,但有8到9列。
答案 0 :(得分:1)
如果您将param_2
设置为VARCHAR2
,则可以正常工作;使用隐式转换。
以下是我要做的事情,使用REF_CURSOR
:
create or replace procedure getempdetails (
pcol_name in varchar2
, pcol_value in varchar2
, pres_cursor out sys_refcursor
) is
begin
open pres_cursor for 'SELECT emp_id, emp_name, emp_dept FROM emp WHERE '
||pcol_name||'='''||pcol_value||'''';
end;
/
:pcol_name
; 但我无法找到如何使其隐式转换。
create or replace procedure getempdetails (
pcol_name in varchar2
, pcol_value in varchar2
, pres_cursor out sys_refcursor
) is
begin
OPEN pres_cursor
FOR 'SELECT emp_id, emp_name, emp_dept FROM emp WHERE :pcol_name='''||pcol_value||''''
USING pcol_name;
end;
/
然后使用光标:
SQL> insert into emp values(1, 'John', 'IT');
1 row created.
SQL> variable r refcursor;
SQL> exec getempdetails('emp_id', '1', :r);
PL/SQL procedure successfully completed.
SQL> print r
1 John IT
SQL>
如果要在进一步的PL / SQL中使用此游标,请再搜索一下。例如。 像here或here这样的好例子。
NB:
基本上,in PL/SQL, '
escapes '
。因此,如果您想在PL / SQL中的字符串中使用'
,则可以编写' I want a quote there -> '' <- '
答案 1 :(得分:0)
如何根据值返回整行?
您可以创建一个out参数,它可以是表格的类型,例如:
Procedure gettemplates(
columnname in varchar2,
value in varchar2,
entirerowreturn out yourtable%rowtype) is ...