首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个字符传递给一个函数,然后返回多少个以接受字符开头的员工姓名?

将一个字符传递给一个函数,然后返回多少个以接受字符开头的员工姓名?
EN

Stack Overflow用户
提问于 2019-01-06 09:16:14
回答 1查看 426关注 0票数 1

我已经创建了一个函数来传递一个字符,并返回以接受的character.Issue开头的员工名称计数。当我使用PLSQL块执行PLSQL函数时,必须声明"PLS-00201:标识符'G‘“。

我已经使用select语句执行了函数,并成功地显示了输出,但是当我试图使用PLSQL块执行函数时,错误: PLS-00201:标识符'G‘必须被声明为

代码语言:javascript
复制
create or replace function charcount(v_char in varchar2)

return varchar2

is

v_character number;

begin 

select count(*) into v_character from employees where substr(First_name,1,1)= v_char;

return v_character;

end;

使用PLSQL块执行PLSQL函数:

代码语言:javascript
复制
declare 

 v_char char;

 v_count number;

begin

 v_char:=&v_char;

 v_count:=charcount(v_char);

 dbms_output.put_line(v_count);

end;

输入替换变量

代码语言:javascript
复制
v_char=G.

output=11.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-06 10:02:02

您需要在调用块中使用'&v_char'而不是&v_char&变量使用文字替换-它们不像普通的程序变量。

代码语言:javascript
复制
declare 
    v_char varchar2(1) := '&textinput';
    v_count number;
begin 
    v_count := charcount(v_char);    
    dbms_output.put_line(v_count);
end;

注意,在PL/SQL中,您可以在声明变量时分配一个值,这将在稍后保存一个步骤。

此外,我还将char更正为标准的Oracle类型varchar2

为了便于阅读,我倾向于在赋值操作符的两边留出一个空格。我发现x := y通常比x:=y更具可读性。此外,我认为缩进的行业标准是2或4(我个人并不热衷于2),任何比这更少或更多的东西看起来都是不必要的奇怪。

在您的功能中,您可以考虑更改

代码语言:javascript
复制
where substr(first_name,1,1) = v_char;

代码语言:javascript
复制
where first_name like v_char||'%';

利用first_name上的任何索引。(它还允许您传递一个多个字符的字符串。)

顺便说一句,通常的惯例是对变量使用v_前缀(变量为‘v’,局部变量有时为'l‘),参数使用其他前缀(通常为p_,有时为p_)。

把所有这些加在一起,就会:

代码语言:javascript
复制
create or replace function charcount
    ( p_matchstring in varchar2 )
    return varchar2
is
    l_num_matching number;
begin
    select count(*) into l_num_matching
    from   employees
    where  first_name like p_matchstring||'%';

    return l_num_matching;
end charcount;

从SQL*Plus或其他支持替换变量的客户端调用:

代码语言:javascript
复制
SQL> declare
  2      v_char varchar2(1) := '&textinput';
  3      v_count number;
  4  begin
  5      v_count := charcount(v_char);
  6      dbms_output.put_line(v_count);
  7  end;
  8  /
Enter value for textinput: A
10

甚至只是

代码语言:javascript
复制
begin
    dbms_output.put_line(charcount('&textinput'));
end;

或者(使用 command -尽管这不是SQL或PL/SQL的一部分):

代码语言:javascript
复制
exec dbms_output.put_line(charcount('&textinput'))

或者 statement

代码语言:javascript
复制
call dbms_output.put_line(charcount('&textinput'));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54060148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档