我如何改进我的程序以在后端成功工作?
How I can improve my procedure to work successfully in a backend?
我正在尝试为我的 courser 项目的后端创建一个动态 sql 过程。我想按特定列排序。
CREATE OR REPLACE PROCEDURE sort_by_column(p_column_name VARCHAR2, p_parameter VARCHAR2) IS
v_stmt VARCHAR2(1000);
BEGIN
v_stmt := '
SELECT *
FROM CARS
ORDER BY ' || p_column_name || ' ' || p_parameter;
EXECUTE IMMEDIATE v_stmt;
END;
我这样称呼它:
EXECUTE sort_by_column('model', 'ASC');
编译成功。但不显示任何内容。我如何改进我的程序以便后端可以处理数据?
您需要将程序更改为 return 游标。然后当你调用它时,你需要从游标中获取并显示结果。例如:
CREATE OR REPLACE FUNCTION sort_by_column(p_column_name VARCHAR2,
p_parameter VARCHAR2)
RETURN SYS_REFCURSOR
IS
v_stmt VARCHAR2(1000);
csr SYS_REFCURSOR;
BEGIN
v_stmt := 'SELECT *
FROM CARS
ORDER BY ' || p_column_name || ' ' || p_parameter;
OPEN csr FOR v_stmt;
RETURN csr;
END;
CREATE OR REPLACE PROCEDURE fetch_and_print(p_column_name VARCHAR2,
p_parameter VARCHAR2)
IS
csr SYS_REFCURSOR;
rowCars CARS%ROWTYPE;
BEGIN
csr := sort_by_column(p_column_name, p_parameter);
LOOP
FETCH csr INTO rowCars;
EXIT WHEN csr%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('MFG=' || rowCars.MFG ||
' MODEL=' || rowCars.MODEL ||
' COLOR=' || rowCars.COLOR);
END LOOP;
CLOSE csr;
END fetch_and_print;
EXECUTE fetch_and_print('model', 'ASC');
fetch_and_print
中的 DBMS_OUTPUT.PUT_LINE
只是一个示例,因为我不知道您的 CARS table 中有哪些字段 - 您必须更改它以打印任何字段在你的 table.
我正在尝试为我的 courser 项目的后端创建一个动态 sql 过程。我想按特定列排序。
CREATE OR REPLACE PROCEDURE sort_by_column(p_column_name VARCHAR2, p_parameter VARCHAR2) IS
v_stmt VARCHAR2(1000);
BEGIN
v_stmt := '
SELECT *
FROM CARS
ORDER BY ' || p_column_name || ' ' || p_parameter;
EXECUTE IMMEDIATE v_stmt;
END;
我这样称呼它:
EXECUTE sort_by_column('model', 'ASC');
编译成功。但不显示任何内容。我如何改进我的程序以便后端可以处理数据?
您需要将程序更改为 return 游标。然后当你调用它时,你需要从游标中获取并显示结果。例如:
CREATE OR REPLACE FUNCTION sort_by_column(p_column_name VARCHAR2,
p_parameter VARCHAR2)
RETURN SYS_REFCURSOR
IS
v_stmt VARCHAR2(1000);
csr SYS_REFCURSOR;
BEGIN
v_stmt := 'SELECT *
FROM CARS
ORDER BY ' || p_column_name || ' ' || p_parameter;
OPEN csr FOR v_stmt;
RETURN csr;
END;
CREATE OR REPLACE PROCEDURE fetch_and_print(p_column_name VARCHAR2,
p_parameter VARCHAR2)
IS
csr SYS_REFCURSOR;
rowCars CARS%ROWTYPE;
BEGIN
csr := sort_by_column(p_column_name, p_parameter);
LOOP
FETCH csr INTO rowCars;
EXIT WHEN csr%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('MFG=' || rowCars.MFG ||
' MODEL=' || rowCars.MODEL ||
' COLOR=' || rowCars.COLOR);
END LOOP;
CLOSE csr;
END fetch_and_print;
EXECUTE fetch_and_print('model', 'ASC');
fetch_and_print
中的 DBMS_OUTPUT.PUT_LINE
只是一个示例,因为我不知道您的 CARS table 中有哪些字段 - 您必须更改它以打印任何字段在你的 table.