2015-06-16 3 views
0

Мне нужно получить recordcount запроса insert into select с использованием cfquery.Cfquery insert неожиданный номер записи

При тестировании простым запросом я не могу получить желаемый результат.

Я всегда получаю RecordCount, как 1.

кодекса:

<cfquery name="Q_Test" datasource="DATABASE" result="queryresult"> 
     INSERT INTO GS_TEMP 
      SELECT TRUNC (SYSDATE - ROWNUM) dt 
       FROM DUAL CONNECT BY ROWNUM < 366 
</cfquery> 

<cfdump var="#queryresult#"> 

Выход: Insert Query

ли это ожидалось?

+0

Я заметил эту проблему раньше и никогда не нашел причину. Он вставляет все записи, которые он должен делать. –

+0

@MattBusche: Да, операция вставки действительно вставляет все записи. Как ни странно, проблема связана с объектом 'result'. –

+0

В стороне - ваша вставка не будет учитывать високосные годы. Если это проблема, тогда более надежным решением будет: SELECT TRUNC (SYSDATE) - ROWNUM FROM DUAL CONNECT BY TRUNC (SYSDATE) - ROWNUM> = TRUNC (SYSDATE) - INTERVAL '1' YEAR; ' – MT0

ответ

1

Если вы хотите, чтобы получить количество строк, то вы можете сделать:

Oracle

CREATE PROCEDURE create_dates_for_prev_year(
    out_num_rows NUMBER 
) 
AS 
BEGIN 
    INSERT INTO GS_TEMP 
    SELECT TRUNC(SYSDATE) - LEVEL 
    FROM DUAL 
    CONNECT BY TRUNC(SYSDATE) - LEVEL >= TRUNC(SYSDATE) - INTERVAL '1' YEAR; 

    out_num_rows := SQL%ROWCOUNT; 
END create_dates_for_prev_year; 
/

ColdFusion

<cfscript> 
    sp = new StoredProc(dataSource = "DATABASE"); 
    sp.setProcedure("create_dates_for_prev_year"); 
    sp.addParam(cfsqltype="CF_SQL_INTEGER", type="out", variable="numRows"); 
    numRows = sp.execute.getProcOutVariables().numRows; 

    writeDump(numRows); 
</cfscript> 

(Не тестировался приведенный выше код, но должны быть в основном правильными)

Смежные вопросы