在oracle中执行存储过程

2023-12-19

我需要将输出输入uu根据提示传递的值

create or replace procedure chklg( uu out logn.username%TYPE
                                 , pass in logn.password%TYPE)
is
begin
select username into uu from logn where password=pass;
end; 

我尝试以这种方式执行上述过程:

begin 

chklg(:pass);

end

根据定义,过程不返回任何内容。您正在寻找一个function http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions256.htm#SQLRF06181.

create or replace function chklg ( p_pass in logn.password%TYPE
          ) return varchar2 is -- assuming that logn.username%TYP is a varchar2

   l_uu logn.username%type;

begin
   select username into l_uu from logn where password = p_pass;
   return l_uu;
-- If there-s no username that matches the password return null.
exception when no_data_found then
   return null;
end; 

我对此有点担心,因为它看起来好像您将密码存储为纯文本。这不是最佳实践。

您应该在用户名旁边存储密码的加盐和胡椒散列,然后对密码应用相同的加盐、胡椒和散列,并选择hash从数据库中。

您可以通过以下两种方式之一执行该函数:

select chklg(:pass) from dual

or

declare
   l_pass logn.password%type;
begin
   l_pass := chklg(:pass);
end;
/

为了完整起见,弗兰克·施密特提出了一个very评论中的观点有效。除了以非常危险的方式存储密码之外,如果两个用户具有相同的密码会发生什么?

您将在您的SELECT INTO ...。这意味着返回给变量的行太多。如果您也传递用户名,那就更好了。

这可能会使您的函数如下所示

create or replace function chklg ( 
         p_password_hash in logn.password%type
       , p_username in logn.username%type
          ) return number

   /* Authenticate a user, return 1/0 depending on whether they have
      entered the correct password.
      */

   l_yes number := 0;

begin

   -- Assumes that username is unique.
   select 1 into l_yes 
     from logn
    where password_hash = p_password_hash
      and username = p_username;

   return l_yes;

-- If there-s no username that matches the password return 0.
exception when no_data_found then
   return 0;
end; 

如果您只想使用一个过程(根本没有真正的理由这样做,因为它不必要地限制您;您没有执行任何 DML),那么您可以获得输出参数,但您必须为过程提供一个参数它可以填充。

在你的情况下,它看起来像这样。

declare
   l_uu logn.username%type;
begin 
   chklg(l_uu, :pass);
   dbms_output.put_line(l_uu);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在oracle中执行存储过程 的相关文章

随机推荐

  • 自定义视图 (xib) 在情节提要上不可见

    我有一个自定义视图xib我有多个TableViews 我正在将其加载到ViewController作为嵌套视图 ViewController View View This is where I load my Custom View 当我运
  • JavaScript 中的位移位

    我有一个非常大的数字 5799218898 并且想将其右移到 13 位 所以 windows calculator 或 python 给了我 5799218898 gt gt 13 10001010010000111001111110000
  • 如何在变基期间对所有提交运行测试

    我有一个包含大量提交的功能分支 A B C master B C D Z feature 我正在研究feature但另一个开发人员已经创建了提交B and C 现在我想变基feature提交时C 但我和 或自动合并在变基期间引入了错误 我的
  • 如何在 swift 3 中检测文本视图开始编辑和结束编辑

    我在 Objective C 中找到了相关的问题和答案 但我无法快速找到正确的方法 有没有方法可以检测与快速归档的文本相同的文本视图 我想解决通过键盘隐藏文本视图的问题 为此 我需要一种方法来检测开始和结束编辑文本视图 任何帮助 将不胜感激
  • 从 Android 中的 onCreate 获取意图

    我使用 Intent 和一些额外的内容从我的小部件启动一个 Activity 无论如何 我只能在 Activity 处于后台时获取 Intent 创建 Activity 时如何获取 Intent 尝试使用 this getIntent 但额
  • 在 symfony 中扩展 sfDoctrineRecord

    我已经向 symfony 项目中的一些实例类添加了一些功能 我希望所有实例类都具有这些功能 如果我对编辑核心 symfony 安装没有任何疑虑 我会直接将我的方法添加到sfDoctrineRecord班级 但我当然不想这样做 因为我的更改会
  • 如何在C中修改共享内存(shmget/shmat)?

    我有一个结构 struct sdata int x int y time t time 我为该结构创建共享内存 如下所示 size t shmsize sizeof struct sdata shmid shmget IPC PRIVATE
  • 警报对话框未显示

    我是安卓开发新手 尝试在我的项目中实现 android 对话框 但它没有显示 logcat 中没有错误 这是它的 XML 代码
  • 电子邮件验证的正则表达式规则在 vuejs 中不起作用

    我尝试了这段代码 如https v2 vuejs org v2 cookbook form validation html https v2 vuejs org v2 cookbook form validation html validE
  • 测试 Eclipse 插件时的 AGENT_ERROR_INVALID_EVENT_TYPE

    我正在开发一个 eclipse 插件 我在测试的时候有时会遇到如下错误 JDWP exit error AGENT ERROR INVALID EVENT TYPE 204 ExceptionOccurred src share back
  • 使用正则表达式过滤差异

    似乎能够过滤差异以便不显示细微的更改将非常方便 我想编写一个将在该行上运行的正则表达式 然后向其传递另一个字符串 该字符串使用捕获的参数生成规范形式 如果之前和之后的行产生相同的输出 那么它们将从差异中删除 例如 我正在开发一个 PHP 代
  • 网络同步:优点和缺点?

    您的合作经历如何Websync http www frozenmountain com 彗星框架 在使用它之前您是否考虑过任何替代方案 到目前为止我可以这么说 Pros 非常简单易用 不需要任何服务器配置 Cons 昂贵 事实证明为我们节省
  • Spring 上下文层次结构

    我将使用一个父上下文创建多个 Spring 上下文 以下是我将如何创建父上下文 new ClassPathXmlApplicationContext new String ApplicationContext application xml
  • 如何将我的 Vuex 操作分解为多个文件并仍然使用“dispatch”?

    我已将操作分解为多个文件 以使我的项目更具可维护性和可扩展性 尝试去dispatch然而 从一项行动到另一项行动是行不通的 我的文件树如下所示 store js actions actions js createShape js addSh
  • Windows Metro 应用程序中缺少 XPath

    有没有一种简单的方法可以在 Windows 8 Metro 应用程序中对 XML 执行 XPath 查询 System Xml XPath用于创建 Metro 应用程序的 NET 框架中不存在 并且在尝试使用 HTMLAgilityPack
  • php中如何将二维数组转换为一维数组?

    我有一个多维数组获取下面给出的结果链接 Array 0 gt Array 0 gt 70 1 gt Array 0 gt 67 2 gt Array 0 gt 75 1 gt 73 2 gt 68 3 gt Array 0 gt 68 4
  • 初始化 Generic 类型的 Java 通用数组

    所以我正在开发这个通用的 HashTable 类 我想将它一般用于任意数量的传入类型 并且我还想将内部存储数组初始化为 LinkedList 的数组 用于冲突目的 其中每个 LinkedList 都被提前指定为 HashTable 类的泛型
  • C# MVC 在查询字符串中返回视图(对象)结果?

    我有这个 actionresult 方法 public ActionResult MenuItemCreated MenuItem item return View item 这是我的观点
  • 当从java运行批处理文件时,1随机出现在>>之前

    我正在尝试从我的 java 代码运行批处理文件 这是批处理文件行 C Users abdelk workspace Symmetrix gt symconfigure sid 13 cmd create dev count 16 size
  • 在oracle中执行存储过程

    我需要将输出输入uu根据提示传递的值 create or replace procedure chklg uu out logn username TYPE pass in logn password TYPE is begin selec