Заявление, о котором идет речь, работает на Coldfusion 11
с hotfix 7
и работает на сервере Linux
, который подключен к Windows Oracle database
. Цель состоит в том, чтобы приложение запускалось на Linux
, что является поэтапным процессом (поэтому база данных находится по адресу Windows server
).sid не возвращается cfprocparam, который подключен к базе данных оракулов
Я знаю, что база данных работает, потому что он подключается успешно через панель Coldfusion
администратора и это SQL
оператор возвращает user_id
успешно:
<cfquery name="qUser" datasource="#Application.datasource#">
SELECT td_user_id
FROM td_user
WHERE ROWNUM <= 1
</cfquery>
Код в вопросе такова:
<cfstoredproc procedure="td_session_pkg.new_session" datasource="#application.datasource#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#arguments.username#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#arguments.password#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#cgi.remote_addr#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#rand_int#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#application.app_id#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="1">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#pwdRequired#">
<cfprocparam type="Out" cfsqltype="CF_SQL_CHAR" variable="sid">
</cfstoredproc>
<!--- Test --->
<cfquery name="testS" datasource="#Application.datasource#">
SELECT
sys_context('USERENV','SID') AS theSid
FROM dual
</cfquery>
<cfthrow message="SID: #sid# and #testS.theSid#">
cfthrow
возвращается
SID: (пусто здесь) и 37
Я пытался много вещей, но до сих пор вернуть sid
правильно (это необходимо для продолжения аутентификации пользователя). Значения внутри тегов cfprocparam
представляют собой переменные, указанные выше, и все имеют допустимые значения.
- ColdFusion переменные не чувствительны к регистру, как заявлено Adobe
Любое понимание, почему это не было бы вернуть sid
и почему SQL
заявление будет? (из моих исследований я считаю, что они одно и то же).
Спасибо за помощь, я буду быстро отвечать на любые вопросы.
Начать с правильной процедуры, если вы передаете те же параметры внутри Oracle? Используя SQL/Plus или SQL Developer, вы можете подключиться к БД и запустить что-то вроде 'SET SERVEROUTPUT ON; DECLARE sid VARCHAR2 (20); BEGIN td_session_pkg.new_session ('username', 'password', 'remote_addr', 0, 0, 1, 0, sid); DBMS_OUTPUT.PUT_LINE ('SID' || sid); КОНЕЦ;/'(с соответствующими значениями). Проверьте, что функция выполняет то, что вы ожидаете, и это не проблема с процедурой. – MT0
Я только что запустил это, выполнил тестовый запрос и связал его. Затем попытался код, который вы предоставили с замещенными значениями, и получил: 'Отчет об ошибке - ORA-06550: строка 1, столбец 35: PLS-00201: идентификатор 'SID' должен быть объявлен ORA-06550: строка 1, столбец 7: PL/SQL: Statement ignored' – theblindprophet