当前位置: 首页 > 知识库问答 >
问题:

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

慕飞章
2023-03-14

我创建了一个函数来传递一个字符,并返回以接受字符开始的员工姓名计数。问题是,当我使用PLSQL块执行PLSQL函数时,出现“PLS-00201:必须声明标识符‘G’”

我已经使用select语句执行了函数,并且成功显示了输出,但当我尝试使用PLSQL块执行函数时,出现错误:PLS-00201:必须声明标识符“G”

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函数:

declare 

 v_char char;

 v_count number;

begin

 v_char:=&v_char;

 v_count:=charcount(v_char);

 dbms_output.put_line(v_count);

end;

输入替代变量

v_char=G.

output=11.

共有1个答案

俞子实
2023-03-14

您需要使用

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),任何小于或大于2的东西都看起来不必要的奇怪。

在你的职能范围内,你可以考虑改变

where substr(first_name,1,1) = v_char;

where first_name like v_char||'%';

利用first\u name上的任何索引。(它还允许您传递多个字符的字符串。)

顺便说一句,通常的惯例是为变量使用前缀v(v表示变量,有时为局部变量,有时为l),并为参数(通常为p,有时为in)。

将所有这些结合在一起可以得到:

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或其他支持替换变量的客户端的调用:

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

甚至只是

begin
    dbms_output.put_line(charcount('&textinput'));
end;

或者(使用SQL*Plus执行命令-尽管这不是SQL或PL/SQL的一部分):

exec dbms_output.put_line(charcount('&textinput'))

或SQL标准call语句:

call dbms_output.put_line(charcount('&textinput'));
 类似资料:
  • 我有一个使用函数的string参数并传递给返回最长单词的函数的代码。 我想知道是否可以使用,然后使用索引访问每个字母表,这样我就可以知道字符串中有多少个单词,然后比较它们,这样我就可以返回最长的单词。 我是这样开始的。它与典型数组很好地工作,但典型数组需要预定义的大小。

  • 更新-此问题的上下文为TypeScript 1.4之前的版本。从那个版本开始,我的第一个猜测就得到了语言的支持。请参阅答案的更新。 我可以声明是一个接受字符串并返回字符串的函数: 我可以将声明为字符串数组: 如何将声明为“接受字符串并返回字符串的函数”数组? 我的第一个猜测是: 这似乎是一个语法错误。如果我去掉额外的括号,那么它是一个从字符串到字符串数组的函数。

  • 有没有一个标准的方法来做这件事?我说得太离谱了吗? 谢谢你的帮助!

  • 我试图将字符串参数传递给JavaScript函数。出于某种原因,它只能获取整数。我在这里只放了字符串的语法,因为我知道这是个问题,因为它与int一起工作。 发送函数内的代码: 最终,我希望用计数器的值调用HTML页面上的以下函数,如上图所示: 正如我提到的,当我发送int时,javascript文件会发出警报,但当我发送字符串时不会做出反应。

  • 我试图使用Apache和MySQL XAMPP数据库为我的论坛建立一个登录页面,但它多次返回回显字符串,我知道它会遍历数据库中的所有行,检查是否为真,它返回的是“无效的用户名或密码!”直到找到正确的登录信息,然后返回“welcome”(欢迎)。 它是如何做到的,它只返回一个不正确的和正确的字符串?。

  • 给定一个字符串和一个非空子字符串,递归计算以该子字符串开始和结束的最大子字符串,并返回其长度。 我所做的没有返回正确的长度。但是因为我保存了所有可能的子字符串,所以我可以确定长度。时间复杂度应该是线性的:O(n)。 这是我尝试过的: