Sql 在Oracle窗体中遇到“坏绑定变量”

Sql 在Oracle窗体中遇到“坏绑定变量”,sql,oracle,plsql,oracleforms,Sql,Oracle,Plsql,Oracleforms,我是甲骨文的新手,我正在同一个网站上做一个项目 我有以下代码,我想为下一步存储变量'wid',但不幸的是,我得到了一个错误 绑定变量错误 我该怎么做呢?任何协助都将不胜感激 代码: “绑定变量错误”的原因如下: 如果:V_ID=U_ID和:PASSWORD=PASS 所以要解决这个问题,您应该删除“:”,所以您的查询应该是这样的 如果V_ID=U_ID,密码=PASS 您已经将数据插入变量中,因此无需再次使用“:” DECLARE U_ID VOTERS.V_ID%TYPE; PASS VOTE

我是甲骨文的新手,我正在同一个网站上做一个项目 我有以下代码,我想为下一步存储变量'wid',但不幸的是,我得到了一个错误

绑定变量错误

我该怎么做呢?任何协助都将不胜感激

代码:


“绑定变量错误”的原因如下:

如果:V_ID=U_ID和:PASSWORD=PASS

所以要解决这个问题,您应该删除“:”,所以您的查询应该是这样的

如果V_ID=U_ID,密码=PASS

您已经将数据插入变量中,因此无需再次使用“:”

DECLARE
U_ID VOTERS.V_ID%TYPE;
PASS VOTERS.PASSWORD%TYPE;
CURSOR LOGIN_CUR IS
SELECT V_ID,PASSWORD FROM VOTERS;

  BEGIN
  SELECT W_ID INTO WID FROM VOTERS WHERE V_ID=V_ID;
  BEGIN
 OPEN LOGIN_CUR;
 LOOP
 FETCH LOGIN_CUR INTO U_ID,PASS;
IF V_ID=U_ID AND PASSWORD=PASS THEN
OPEN_FORM ('........');
EXIT WHEN LOGIN_CUR%FOUND;

END IF;
 END LOOP;
CLOSE LOGIN_CUR;
END;
END;
编辑--

您的光标应该与此类似,此光标工作正常,没有错误。如果您有任何问题,请询问:


你在哪里申报丧偶?另外,你还需要以正确的方式声明变量,我会尽力帮助你。嗨,谢谢。我没有声明wid,因为我不知道如何在表单中…我只知道如何在sqlplus中执行它,它在你运行块之前就完成了。那么我如何在表单中实现它呢。即使我在块中声明它,它也无法识别它,因为我希望它是绑定的。你必须声明它,你的代码需要调整Hanks Moudiz,我愿意调整它。那么你认为我能做得怎么样呢?光标部分工作正常,因为我通过表单输入“:v_id”和“password”,当我想保存特定v_id的w_id以便在下一步使用它时,会出现错误。因为我使用表单,所以我希望从内部块变量a的结果中派生“T_id”,然后存储“T_id”,以便下一个表单能够访问它。问题是为我的下一个表单存储'T_ID'的值,这就是我选择绑定的原因。或者是否有其他方法可以存储可以在不同块/表单上访问的变量值?当然可以,您可以将数据从一个过程移动到另一个过程或从一个块移动到另一个过程,但老实说,我不明白您到底想要什么,您能以更清晰的方式解释它们吗?呵呵,好的,让我尝试简化它。光标部分用于登录,没有大问题。我唯一需要从光标中找到的是用户/投票人的“:v_id”,并在外部块中使用它。首先选择以能够知道他们在哪个位置注册,即“w_id”,然后使用“w_id”仅选择在该位置注册的候选人,供投票人投票。投票是一种不同的形式,因此需要存储“w_id”以便能够访问它。在另一种形式投票中调用它。有点长,但希望您现在对它有一个更好的了解。我是否理解您在第二种情况下更正了,因为您正在打开,您需要访问第一种形式的值?不幸的是,这在形式上是不可能的。但是有一些方法可以处理这个问题,例如在打开第二个表单时将参数传递给它。
DECLARE
U_ID VOTERS.V_ID%TYPE;
PASS VOTERS.PASSWORD%TYPE;
CURSOR LOGIN_CUR IS
SELECT V_ID,PASSWORD FROM VOTERS;

  BEGIN
  SELECT W_ID INTO WID FROM VOTERS WHERE V_ID=V_ID;
  BEGIN
 OPEN LOGIN_CUR;
 LOOP
 FETCH LOGIN_CUR INTO U_ID,PASS;
IF V_ID=U_ID AND PASSWORD=PASS THEN
OPEN_FORM ('........');
EXIT WHEN LOGIN_CUR%FOUND;

END IF;
 END LOOP;
CLOSE LOGIN_CUR;
END;
END;
  DECLARE
   U_ID NUMBER(20);
  PASS VARCHAR2(30);
  WID NUMBER(20);
  A NUMBER(20);
  CURSOR LOGIN_CUR IS
    SELECT id INTO A FROM voters;


 BEGIN
 SELECT T_ID INTO WID FROM voters WHERE T_ID = A;
   BEGIN
   OPEN LOGIN_CUR;
  LOOP
  FETCH LOGIN_CUR INTO U_ID;
 IF WID=U_ID THEN
  OPEN_FORM ('........');
   EXIT WHEN LOGIN_CUR%FOUND;

 END IF;
END LOOP;
CLOSE LOGIN_CUR;
END;
 END;