DBMS_SQL contr registria

gfra
11 de Noviembre del 2005
Hola,

Alguien sabe como contar registros en sql dinamico

Yo tengo

cid := dbms_sql.open_cursor\;
dbms_sql.parse(cid, \'
select count(*) into :datos from \'||tablename||\' where ( entity = \' || empresa || \' )
\',dbms_sql.v7)\;

-- dbms_sql.bind_variable(cid, \':datos\' , datos)\;
--dbms_sql.define_column(cid, 1 , datos,15)\;


n_rows := dbms_sql.execute(cid)\;
fetc:= dbms_sql.last_row_id \;
-- dbms_sql.column_value(cid, 1 , datos)\;

No se por donde ir. Gracias

desa
11 de Noviembre del 2005
Dedicado a mi amigo Carlos y siempre y cuando el siguiente código tenga su aprobación, quizás tratamiento de errores, quizás sobre algo, quizás, quizás, quizás, en cualquier caso un ejemplillo:

CREATE OR REPLACE Function CUENTA
(TABLA varchar2)
RETURN Number IS
mcursor INTEGER;
CARLOS INTEGER;
TOTAL number;
BEGIN
mcursor:= DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE (mcursor, 'SELECT COUNT(*) FROM ' || TABLA, DBMS_SQL.V7);
DBMS_SQL.DEFINE_COLUMN (mcursor, 1, TOTAL);
CARLOS := DBMS_SQL.EXECUTE (mcursor);

LOOP
IF DBMS_SQL.FETCH_ROWS (mcursor) > 0 THEN
DBMS_SQL.COLUMN_VALUE (mcursor, 1, TOTAL);
ELSE
EXIT;
END IF;
END LOOP;

return(TOTAL);
DBMS_SQL.CLOSE_CURSOR (mcursor);
END CUENTA;

Y una vez tengas la función: SELECT CUENTA('NOMBRE_TABLA') FROM DUAL;

Un saludo

Carlos
11 de Noviembre del 2005
>>Dedicado a mi amigo Carlos y siempre y cuando el siguiente código tenga su aprobación, quizás tratamiento de errores, quizás sobre algo

Como casi siempre: NO.

Es mucho mejor:

sql> Declare
2 cuenta NUMBER;
3 begin
4 EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM USER_TABLES ' INTO cuenta;
5 DBMS_OUTPUT.PUT_LINE('CUENTA: ' || TO_NUMBER(CUENTA));
6 end;
7 /
CUENTA: 8

Procedimiento PL/SQL terminado correctamente.

Un saludo.

Carlos.