この記事では、Oracle に関する関連知識を提供します。主に、Oracle クエリ情報の基本的なステートメントを含む、Oracle データベース インジェクションにおけるエイリアス メソッドの使用方法の詳細な説明を紹介します。rownum を見てみましょう。特徴など、皆様のお役に立てれば幸いです。
推奨チュートリアル: 「Oracle ビデオ チュートリアル 」
Oracle Database。Oracle RDBMS、または略して Oracle とも呼ばれます。このデータベースはオラクル社の製品であり、強力な機能と複雑な操作を備えており、無料で利用できますが、サービスは有料であり、現在、中国の銀行、金融機関、外資系企業などの大企業で一般的に利用されています。ビッグデータ産業。
Oracle の機能の概要:
1. Oracle はクエリ言語を使用して情報を取得するときにテーブル名に従う必要があります。これは Access に似ています。テーブルがない場合は、デュアル テーブルを使用できます。 Dual は Oracle の仮想テーブルです。select の形成に使用される文法規則です。Oracle は、dual には常に 1 つのレコードのみが存在することを保証します。直接クエリすると、Union などのデータをクエリする場合、対応する位置のデータ型のみが表示されます。テーブル内の列のデータ型と一致している必要があります。すぐに推測できないデータ型の位置を NULL を使用して置き換えることもできます。これは SQL Server と同様です。 3. Oracle は mysql とは異なります。ページングに制限はありませんが、ページングの実装には 3 層のクエリ ネストが使用されます; 4. Oracle の単一行のコメント シンボルは複数行のコメント シンボルです;
5. Oracle データベースには次のものが含まれますこれらのシステム テーブルには、user_tab_columns、all_tab_columns、all_tables、user_tables など、システム データベースのテーブル名と列名が格納されます。システム テーブルには、ユーザーのすべてのテーブルと列名が格納されます。ここで、table_name はシステム テーブル名を表し、column_name はシステムに存在する列名;
6. Oracle はスプライシング文字列 (URL 内のエンコーディングを使用して表現) を使用し、関数は 2 つの文字列のスプライシングも実現できます;
7. Oracle では、ライブラリは弱体化され、ユーザーが強化されていますが、この区別は主にユーザーに基づいています。単純に理解すると、現在のユーザー名は他のデータベースのライブラリ名と同等であるということになります。
select * from all_tables クエリall Table
select * from user_tables 現在のユーザーのすべてのテーブルをクエリします
select * from all_tab_columns すべてのフィールドをクエリします
select * from user_tab_columns 現在のユーザーのフィールドを問い合わせます
select * from v$version 現在使用している Oracle のバージョンを確認します
select * from all_tables
このページでは大量のデータが出力されていますが、そのほとんどは必要なものではないため、最初の 4 つのデータが必要な場合は、ステートメントを次のように変更します。
select * from all_tables where rownum
次に、次のように仮定します。 2 番目のデータのみが必要なので、「where rownum=2?」と入力できます。できません。これは、rownum がテーブルのフィールド名ではなく、クエリ結果の行番号であるためで、クエリに結果があるたびに、最初の行、2 行目、3 行目などがデフォルトになります。このrownumは行番号であり、特定のフィールドに属していないため、rownumは常に1から始まる疑似例であり、rownum>n、n>1の場合は条件が成立しません。この状況では、不等式法とエイリアス法という 2 つの方法を使用できます。
クエリ ステートメントを使用する場合、テーブルの最初の n レコードまたは中間のレコードを返すように要求することがよくあります。たとえば、大きなテーブル (データが 1W 個あると仮定) では、1000 件のレコードをクエリする必要があります。 1005まで。このような問い合わせに直面した場合、私たちは何をすべきでしょうか?各データベースには独自の解決策があります。たとえば、mysql では、結果のページングに limit コマンドが使用され、MSSQL では、結果のページングに TOP が使用され、Oracle では主に rownum コマンドを使用してこの問題を解決しています。 oracleで指定したデータを出力する方法を見てみましょう。
オンライン Oracle ドリル プラットフォームに次のコマンドを入力します (現在のユーザーのすべてのフィールドをクエリします): select* from user_tab_columns
結果には、現在のテーブルと対応するフィールド名がすべて表示されます。ADMIN テーブルの内容のみを表示したい場合は、次のように入力します: select* from user_tab_columns where table_name= 'ADMIN'
2 番目のデータのみを表示したい場合は、どのように入力すればよいですか?条件 rownum=2 を直接追加することは明らかに不可能です。ここでは、不等式メソッドを使用してクエリを実行できます: select* from user_tab_columns where table_name='ADMIN' and COLUMN_NAMEUNAME
ここから、不等式法にはデータ量が非常に少ない場合にのみ使用できる欠点があることもわかります。データ量が非常に大きい場合には、以下に紹介するエイリアシング方法を使用する必要があります。
次のステートメントを見てみましょう: select column_name,rownum n from user_tab_columns
# この文 カラム名クエリを実行すると、クエリ結果は上から順に1から番号が振られます。 ただし、rownum自体はフィールドではないため、ここでは別名をnとします。このように、このクエリ ステートメントの機能は、列名と各列名に対応する行番号をクエリし、行番号を n フィールドに一律に格納することです。
この時点では行番号を格納する新しいフィールド n を作成しましたが、直後に where n=7 などの条件を追加すると機能しないことに注意してください。このステートメントは n の前に実行する必要があるためです。このフィールドは、n フィールドを使用して情報をクエリする場合、このステートメント全体を他のステートメントのサブクエリに入れる必要があります。このようにして、文が実行された後、n フィールドが存在します。フィールドに追加すると、他の文で使用できるようになります。
次に、最初に ADMIN テーブルのフィールドをクエリします。次のように入力します。
select column_name,rownum n from user_tab_columns where table_name='ADMIN'
ここにクエリ結果は 2 つのフィールド名を取得します。行番号は取得したエイリアス n なので、最初のフィールドは実際のフィールド名で、2 番目のフィールドは取得したエイリアス n です。
たとえば、サブクエリの結果は次のようになります:
行番号 | |
---|---|
1 | |
2 | |
3 | |
#4 |
以上がOracleデータベースインジェクションにおけるエイリアスメソッドの使用の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。