Je suis coincé avec cette requête. J'essaie de convertir mais, je suis nouveau chez Oracle 11 g.
C'est la procédure MS SQL stockée pour convertir avec Oracle 11 g.
CREATE PROCEDURE [dbo].[GetCustomers_Pager] @SearchTerm VARCHAR(100) = '' ,@PageIndex INT = 1 ,@PageSize INT = 10 ,@RecordCount INT OUTPUT AS BEGIN SET NOCOUNT ON; SELECT ROW_NUMBER() OVER ( ORDER BY [CustomerID] ASC )AS RowNumber ,[CustomerID] ,[CompanyName] ,[ContactName] ,[City] INTO #Results FROM [Customers] WHERE [ContactName] LIKE @SearchTerm + '%' OR @SearchTerm = '' SELECT @RecordCount = COUNT(*) FROM #Results SELECT * FROM #Results WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 DROP TABLE #Results END
Je trouve cette procédure MS SQL stockée à ce lien
Ceci est ma procédure stockée Oracle échec. Je suis coincé avec la syntaxe INTO.
CREATE OR REPLACE PROCEDURE GetCustomers_Pager ( SearchTerm IN VARCHAR2 , PageIndex IN NUMBER DEFAULT 1 , PageSize IN NUMBER DEFAULT 10 , RecordCount OUT NUMBER ) AS BEGIN SELECT ROW_NUMBER() OVER( ORDER BY CustomerID ASC )AS RowNumber, ,CustomerID ,CompanyName ,ContactName ,City INTO Results FROM Customers WHERE ( Customers LIKE SearchTerm + '%' OR ContactName LIKE SearchTerm + '%') OR SearchTerm = ''; SELECT RecordCount = COUNT(*) FROM Results; SELECT * FROM Results WHERE RowNumber BETWEEN(PageIndex -1) * PageSize + 1 AND(((PageIndex -1) * PageSize + 1) + PageSize) - 1; DROP TABLE Results; END GetCustomers_Pager;
Est-ce que quelqu'un peut m'aider s'il vous plait?
Vous pouvez utiliser uniquement une variable de type simple dans la clause SELECT INTO
, pour la sélection dans le tableau, utilisez SELECT BULK COLLECT INTO
. Cependant, vous devez déclarer la variable que vous select et son type doit correspondre.
Si vous voulez sélectionner uniquement le nombre, utilisez ceci:
SELECT COUNT(*) INTO RecordCount FROM (SELECT ROW_NUMBER() OVER( ORDER BY CustomerID ASC )AS RowNumber, CustomerID, CompanyName, ContactName, City FROM Customers WHERE ( Customers LIKE SearchTerm + '%' OR ContactName LIKE SearchTerm + '%') OR SearchTerm = '') s WHERE RowNumber BETWEEN (PageIndex-1)*PageSize + 1 AND PageIndex*PageSize;
Si vous voulez returnner les loggings, vous devez définir le type de tableau, append le paramètre de sortie Records
et utiliser SELECT * BULK COLLECT INTO Records
, puis RecordCount := Records.COUNT;
.
Mais le meilleur moyen de renvoyer des données est un paramètre de sortie REF CURSOR
, voir http://oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php .
Code de procédure Oracle avec slider en tant que paramètre de sortie:
CREATE OR REPLACE PROCEDURE GetCustomers_Pager ( SearchTerm IN VARCHAR2, PageIndex IN NUMBER DEFAULT 1, PageSize IN NUMBER DEFAULT 10, RecordCount OUT NUMBER, Records out sys_refcursor ) AS begin -- count all matching rows select count(1) into RecordCount from Customers where ContactName like SearchTerm||'%'; -- get all matching rows into cursor "Records" -- and filter them including PageIndex and PageSize parameters open Records for select rn, customerid, companyName, contactName, City from ( select row_number() over (order by customerID) rn, customerid, companyName, contactName, City from customers where ContactName like SearchTerm||'%' ) where rn between (PageIndex-1) * PageSize and (((PageIndex-1) * PageSize + 1) + PageSize) - 1; end GetCustomers_Pager;
Exemple de code C # appelant cette procédure et remplissant DataGridView:
OracleCommand cmd = new OracleCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "getcustomers_pager"; cmd.Connection = CONNECTION.oconn; cmd.Parameters.Add(new OracleParameter("SearchTerm", OracleType.VarChar, 3)).Value = "Mar"; cmd.Parameters.Add(new OracleParameter("PageIndex", OracleType.Number)).Value = 1; cmd.Parameters.Add(new OracleParameter("PageSize", OracleType.Number)).Value = 5; OracleParameter p = new OracleParameter("RecordCount", OracleType.Number); p.Direction = ParameterDirection.Output; cmd.Parameters.Add(p); p = new OracleParameter("Records", OracleType.Cursor); p.Direction = ParameterDirection.Output; cmd.Parameters.Add(p); OracleDataAdapter da = new OracleDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); dgv.DataSource = ds.Tables[0];