如何修复参数名称不匹配的问题 - DOJO 和 PL/SQL
Posted
技术标签:
【中文标题】如何修复参数名称不匹配的问题 - DOJO 和 PL/SQL【英文标题】:How Do You Fix A Parameter Names Mismatch - DOJO and PL/SQL 【发布时间】:2008-10-10 19:13:30 【问题描述】:如果客户端名称是您使用的服务器端语言中的关键字或保留字,您如何解决名称不匹配问题?
DOJO javascript 工具包有一个 QueryReadStore 类,您可以将其子类化以向服务器提交 REST 模式查询。我将它与 FilteringSelect Dijit 结合使用。
我可以继承 QueryReadStore 并指定传递给服务器的参数和参数。但在此过程中,“start”和“count”参数正在从客户端传递到服务器。我进入 API 并发现 QueryReadStore.js 正在发送这些参数名称。
我正在使用 Fiddler 来确认实际发送和带回的内容。服务器响应告诉我,由于“start”和“count”参数,我的参数名称不匹配。问题是,我不能在 PL/SQL 中使用“start”和“count”。
将不胜感激解决方法或正确的实施建议...谢谢。
//我尝试将代码sn-p放在这里,但是由于它主要是html,所以效果不佳。
【问题讨论】:
【参考方案1】:虽然感觉做错了事,因为我正在破解一个经过良好测试、编写良好的 JavaScript 工具包,但这就是我解决问题的方法:
我进入 DOJOX QueryReadStore.js 并用可接受的(服务器端语言)参数名称替换“开始”和“计数”引用。
我想通过我的 PL/SQL (但我不知道如何绕过保留字)或客户端代码 (子类化没有做)来处理这个问题诀窍) ...无需进入图书馆的内部。但它有效,我可以继续前进。
【讨论】:
【参考方案2】:正如您所提到的,与从 API 中删除它相反,您实际上可以使用自己的 fetch 创建一个子类,并删除 start/count 参数(理论上)。查看此 URL 以获得指导:
http://www.sitepen.com/blog/2008/06/25/web-service-data-store/
Start 和 count 实际上非常有用,因为它们允许您为查询传递参数,可用于过滤大量数据集,并且有助于管理客户端分页。我会尝试子类化、拦截和删除。
【讨论】:
【参考方案3】:您的 pl/sql 程序是否通过 URL 和 mod_plsql 访问?如果是这样,那么您可以使用“灵活的参数传递”并将变量分配给名称/值对数组。
像这样定义你的包规范......
create or replace package pkg_name
TYPE plsqltable
IS
TABLE OF VARCHAR2 (32000)
INDEX BY BINARY_INTEGER;
empty plsqltable;
PROCEDURE api (name_array IN plsqltable DEFAULT empty ,
value_array IN plsqltable DEFAULT empty
);
END pkg_name;
然后是正文:
CREATE OR REPLACE PACKAGE BODY pkg_name AS
l_count_value number;
l_start_value number;
PROCEDURE proc_name (name_array IN plsqltable DEFAULT empty,
value_array IN plsqltable DEFAULT empty) is
------------
FUNCTION get_value (p_name IN VARCHAR) RETURN VARCHAR2 IS
BEGIN
FOR i IN 1..name_array.COUNT LOOP
IF UPPER(name_array(i)) = UPPER(p_name) THEN
RETURN value_array(i);
END IF;
END LOOP;
RETURN NULL;
END get_value;
----------------------
begin
l_count_value := get_value('count');
l_start_value := get_value('start');
end api;
end pkg_name;
然后你可以调用 pkg_name.api 使用
http://server/dad/!pkg_name.api?start=3&count=3
【讨论】:
以上是关于如何修复参数名称不匹配的问题 - DOJO 和 PL/SQL的主要内容,如果未能解决你的问题,请参考以下文章